CJR ENGPRO — GESTÃO DE CONTRATOS E OBRAS  ·  versão 0.80.0 (etapas 1 a 7 + login único, relatórios, importação, celular, carteira, arquivos e banco central)
=====================================================================

O QUE É
Módulo para acompanhar contratos do início ao encerramento, para órgão
público (fiscalização) ou para a empresa contratada.

O QUE JÁ FUNCIONA NESTA VERSÃO
- Entrada com senha de dados (AES-256-GCM). Os dados ficam cifrados no
  navegador e, com a pasta conectada, em Dados\Contratos\contratos_dados.json
  (+ cópia diária em Dados\Contratos\Backups).
- Menu padrão CJR ENGPRO em sanfona, tema claro/automático/escuro, celular.
- Modo órgão ou empresa (Sistema › Licença e modo).
- Cadastros: órgãos e secretarias, empresas, pessoas, obras e locais,
  licitações, fontes e convênios, dotações, índices de reajuste.
- Contratos: dados completos (vigência separada do prazo de execução,
  dias corridos ou úteis com feriados, garantia, ART, BDI, desconto,
  data-base), situação com histórico, selo de vigência, designação de
  gestor/fiscais/RT/preposto com portaria, linha do tempo.
- Prazos e alertas automáticos (vigência, execução, OS, garantia, ART,
  designações, medição mensal, anualidade do reajuste) + prazos manuais.
- Painel com indicadores, alertas e gráficos.
- Relatórios timbrados: Ficha do contrato, Relação de contratos, Prazos,
  Relatório de gráficos (Imprimir/PDF, Word, Excel, Salvar na pasta).
- Empresa, logos e assinaturas; feriados locais; backup e restauração;
  registro de atividades; bloqueio por inatividade (20 min).

NOVO NA 0.2.0 (etapa 2)
- Planilha orçamentária: importar de Excel (.xlsx), CSV, PDF com texto ou
  colando do Excel; reconhece cabeçalho, grupos (1, 1.1, 1.1.1), descrições
  quebradas em várias linhas no PDF; opção de aplicar BDI e desconto; confere
  quantidade × preço e o total com o valor do contrato. Versões (V0…) e trava
  depois da 1ª medição (mudanças só por replanilhamento, etapa 3).
- Cronograma físico-financeiro por etapa e mês, Curva S prevista × realizada,
  desvio em pontos percentuais e tendência de término (ritmo dos últimos 3 meses).
- Medições: boletim com contratado, acumulado anterior, período, acumulado,
  saldo e %; memória de cálculo por item (dimensões ou valor direto, deduções);
  glosas; retenções (ISS e INSS com base reduzida, IR, caução); valor líquido;
  justificativa obrigatória para quantidade acima do contratado; fluxo
  rascunho → enviada → em análise → aprovada/devolvida → atestada, com
  assinatura (papel, nome, cargo) no histórico.
- Relatórios: Boletim de medição, Memória de cálculo, Evolução (cronograma e
  Curva S), Planilha orçamentária — A4 paisagem, PDF/Word/Excel/pasta.

NOVO NA 0.3.0 (etapa 3)
- Termos aditivos: prorrogação de vigência e de execução, acréscimo/supressão
  por replanilhamento (nova versão V1, V2… da planilha), itens novos com o
  desconto da licitação, reequilíbrio econômico-financeiro e outras alterações.
  Fluxo solicitado → em análise → aprovado → firmado (ou indeferido/cancelado),
  com justificativa, pareceres da fiscalização e jurídico e histórico.
- Limites do art. 125: acréscimos e supressões somados SEPARADAMENTE sobre o
  valor inicial atualizado (com reajustes); alerta a 80 % do limite e bloqueio
  acima de 25 % (50 % em reforma) sem justificativa. A quantidade nova não pode
  ficar abaixo do que já foi medido.
- Ao firmar: aplica a nova vigência, o prazo de execução, a nova planilha (a
  partir da data escolhida) e o novo valor. Alerta de prorrogação depois do
  término da vigência.
- Apostilamento de reajuste por índice: busca I0/I1 em Cadastros › Índices,
  confere a anualidade, calcula saldo × (I1/I0 − fator anterior); medições a
  partir da data de efeito recebem a linha de reajuste no boletim.
- Paralisações e reinícios: o contrato passa a "Paralisado", os dias voltam ao
  prazo de execução e há alerta quando a execução passa da vigência.
- Relatórios: Ficha do aditivo/apostilamento (com memória do reajuste e
  limites) e Quadro comparativo do replanilhamento (PDF/Word/Excel).

NOVO NA 0.4.0 (etapa 4 — Financeiro)
- Empenhos com reforço e anulação, saldo por empenho e alerta quando o saldo
  não cobre uma medição média.
- Notas fiscais por medição (valor sugerido = bruto + reajuste − glosas;
  retenções da medição proporcionais), atesto, liquidação com empenho
  (bloqueia sem saldo) e vencimento (prazo configurável, padrão 30 dias).
- Pagamentos em ordem cronológica por fonte de recurso (art. 141): fila pela
  data de exigibilidade; pagar fora da ordem exige a hipótese do § 1º e
  justificativa, que vai para o relatório. A medição passa sozinha a
  Liquidada e Paga.
- Retenções e recolhimentos por competência (ISS, INSS, IR, caução) com guia.
- Garantias: caução, seguro-garantia, fiança; endossos; alerta de endosso
  quando um aditivo é firmado depois da última atualização; devolução só
  após o recebimento (com confirmação).
- Relatórios: Execução financeira do contrato e Ordem cronológica de
  pagamentos (com as quebras justificadas).

NOVO NA 0.5.0 (etapa 5 — Diário de obra e fotos)
- Diário de obra (RDO): calendário do mês (assinado, aberto, impraticável,
  dia útil sem RDO), tempo manhã/tarde, condição do dia, efetivo por função,
  equipamentos (operando/parado/manutenção), serviços ligados aos itens da
  planilha, ocorrências, visitas, comentário da fiscalização e fotos do dia.
  O dia seguinte copia efetivo e equipamentos. Assinatura do RT e do fiscal
  trava o RDO; correções depois disso entram como adendo.
- Dias impraticáveis aparecem no pedido de prorrogação de prazo (aditivo).
- Fotos: várias de uma vez; data, hora e GPS lidos da própria foto (EXIF);
  redução para 1600 px no navegador; guardadas cifradas e copiadas em
  Dados\Contratos\Fotos\<contrato>\<AAAA-MM>\; legenda, tipo (antes,
  durante, depois, ocorrência), item da planilha e medição. As fotos vão
  no backup completo.
- Relatório fotográfico com 2, 4 ou 6 fotos por página ou comparativo
  antes × depois por item; botão de fotos do período na medição.
- Impressão do diário do mês: resumo + um RDO por página com fotos.

NOVO NA 0.6.0 (etapa 6 — Documentos e fiscalização)
- 17 modelos de documento prontos e editáveis: ofício, pedido de prorrogação,
  pedido de aditivo de valor, justificativa técnica, parecer, despacho, termo
  aditivo, apostilamento, ordem de serviço, de paralisação e de reinício,
  notificação e resposta, termos de recebimento provisório e definitivo,
  atestado de capacidade técnica e portaria de designação de fiscal.
- Variáveis entre chaves ({contrato.numero}, {aditivo.novaVigencia},
  {fiscal}…) e quadros automáticos ({quadro.limites}, {quadro.aditivo},
  {quadro.reajuste}, {quadro.papeis}, {quadro.servicos}). O texto gerado
  pode ser editado; a prévia sai timbrada com as assinaturas certas.
- Numeração automática por tipo e ano (OF 001/2026, JT 001/2026…) ao emitir;
  situação rascunho → emitido → assinado → enviado (protocolo) → respondido.
- Botões "Gerar documento" no aditivo, na paralisação, na notificação, no
  recebimento e na ficha do contrato (aba Documentos).
- Fiscalização: visitas com checklist por tipo de obra; item não conforme
  abre não conformidade com gravidade e prazo; notificação com prazo de
  defesa em dias úteis; resposta (no prazo ou não) e decisão com sanção do
  art. 156 (multa limitada a 0,5 %–30 % do contrato).
- Recebimento provisório (contrato passa a Concluído) e definitivo
  (Recebido; bloqueado com não conformidade aberta), com os termos gerados.
- Linha do tempo completa do contrato, com filtro por tipo de evento.

A pasta _lib (leitor de PDF, pdf.js da Mozilla, licença Apache-2.0) deve ficar
junto de Contratos.html.

NOVO NA 0.7.0 (etapa 7 — Aprovação por arquivo e gráficos)
- Empresa: na medição enviada, "Exportar para o fiscal" gera o arquivo .cjrmed
  (boletim, memória de cálculo, glosas, retenções e hash SHA-256) em
  Dados\Contratos\Aprovacoes. "Importar resposta" lê o .cjrresp do órgão: a
  medição passa a Aprovada (com todas as assinaturas) ou Devolvida (com o
  motivo). A resposta é recusada se tiver sido alterada ou se a medição mudou
  depois da exportação.
- Órgão: Fiscalização › Aprovações de medição importa .cjrmed deste módulo e
  dos módulos Máquinas, Limpeza, Veículos e Rotas; vincula pelo nº do contrato
  + CNPJ da contratada (ou manualmente); recusa arquivo alterado ou repetido.
  Medição vinda do módulo Contratos entra sozinha no contrato (itens pelo
  código da planilha, com glosas e retenções). Aprovar/reprovar com papel,
  nome, cargo e justificativa (obrigatória na reprovação), várias
  assinaturas; "Exportar resposta (.cjrresp)" trava a decisão. Termo de
  aprovação/reprovação timbrado.
- Painel: Curva S do contrato escolhido (desvio e tendência de término),
  medido × pago por mês e alertas de medições aguardando aprovação, respostas
  a exportar e medições sem resposta há mais de 7 dias.
- Relatório de gráficos ampliado: resumo geral e uma página por contrato
  (Curva S, indicadores, medido × pago por mês, valor por medição); botão
  "Gráficos" na ficha do contrato.

NOVO NA 0.8.0 — login único, tela de Relatórios e Importar/Exportar
- LOGIN ÚNICO DO CJR ENGPRO (igual aos módulos 02–09):
  · Entre pela tela de início (ENGPRO.html) e clique em "Gestão de Contratos":
    o módulo abre direto, sem senha nenhuma.
  · A senha de dados do módulo (AES-256) é criada sozinha no primeiro acesso e
    guardada no cofre do CJR ENGPRO (no seu usuário e no acesso comum dos
    usuários liberados). Ninguém precisa criar nem digitar senha do módulo.
  · Abrindo Contratos.html direto, ele pede o usuário e a senha do CJR ENGPRO.
  · Quem pode entrar: administrador geral ou usuário com "Gestão de Contratos"
    liberado em CJR ENGPRO › Usuários e acessos, dentro da licença/plano.
  · Perfil no módulo (Usuários e acessos › perfil por módulo): Administrador
    (tudo), Operador (sem backup/restauração/começar do zero), Consulta (só vê,
    imprime e baixa; nada é gravado).
  · A pasta Dados\Contratos é conectada sozinha.
  · Sair (rodapé do menu) e o bloqueio por inatividade (20 min, aviso de 60 s)
    encerram a sessão e voltam à tela de início.
  · Banco antigo (criado com senha própria, antes do login único): no primeiro
    acesso pelo sistema ele é guardado em Dados\Contratos\Backups ("Contratos
    antes do login unico …"), o módulo começa um banco novo e avisa. Para trazer
    os dados: Sistema › Importar, exportar e backup › Restaurar backup, com a
    senha antiga — depois disso o módulo continua abrindo direto.
  · Empresa: "Trazer do CJR ENGPRO" (Sistema › Empresa) copia razão social,
    CNPJ, endereço, logo, timbrado e carimbos do cadastro central; no primeiro
    acesso isso é feito sozinho.
- RELATÓRIOS (menu Relatórios): Boletim de medição, Memória de cálculo,
  Relatório fotográfico e Ficha do contrato abrem a tela já com o documento
  marcado; "Outros relatórios" mostra o catálogo inteiro. Filtros (contrato e
  período) e botões Exportar PDF · Imprimir · Excel · Word · Salvar na pasta;
  documentos em caixas de marcar (Todos / Nenhum) e prévia de todos em
  sequência, em folhas A4 brancas (retrato ou paisagem conforme o documento),
  também no tema escuro. Salvar na pasta grava HTML (para imprimir/PDF), Excel
  (uma aba por documento) e Word em Dados\Contratos\Relatorios com o nome
  "Gestão de Contratos e Obras - <documento> - AAAA-MM-DD HHhMM" e abre o
  diálogo "Relatório pronto". Gráficos só no Relatório de gráficos (Painel).
- IMPORTAR / EXPORTAR NAS TELAS: botão "Importar/Exportar" em Órgãos, Empresas,
  Pessoas, Obras, Licitações, Fontes, Dotações, Índices e Contratos — Excel,
  CSV, JSON, Baixar modelo e Importar… (xlsx, o .xls do modelo, csv ou json)
  com prévia de novos, atualizados (pela chave: CNPJ, CPF, nº do contrato…),
  sem mudança e com erro antes de gravar. Células vazias não apagam dados.
  Sistema › Importar, exportar e backup: modelo completo (uma aba por cadastro)
  e "Importar planilha completa" (órgãos e empresas entram antes dos contratos).

NOVO NA 0.9.0 — MEDIÇÃO PELO CELULAR EM CAMPO
- Operação › Campo (celular) › "Gerar pacote para o celular" (ou o botão
  "Celular" dentro de uma medição em rascunho): cria o arquivo .cjrcampo com os
  itens da planilha, o já medido (anteriores + o que está na medição) e o
  período da medição em aberto. O arquivo sai CIFRADO com um PIN de 6 números,
  mostrado na tela; fica também em Dados\Contratos\Campo.
- No celular: abra o Campo.html (desta pasta; copie para o celular uma vez),
  escolha o .cjrcampo e digite o PIN. Funciona sem internet.
  · Itens: busca, saldo de cada item; lançamento com local/estaca, C × L × H ×
    nº de vezes ou quantidade direta, dedução; aviso quando passa do contratado.
  · Fotos: câmera ou galeria, reduzidas a 1600 px, com a posição GPS do celular,
    tipo (antes/durante/depois…), legenda e item.
  · Diário do dia: tempo manhã/tarde, efetivo, serviços executados, ocorrências.
  · Tudo fica guardado no celular cifrado com o PIN ("Continuar" na abertura).
  · Enviar: "Gerar e enviar" cria o retorno cifrado (compartilhar pelo
    WhatsApp/e-mail ou salvar em Downloads).
- No escritório: Campo (celular) › "Importar retorno" (ou "Retorno do celular"
  no Diário de obra). O PIN fica guardado no módulo — não precisa digitar.
  Prévia (lançamentos por item, fotos, diários, medição de destino) e, ao
  importar: as linhas entram na memória de cálculo da medição (marcadas como do
  campo) e a quantidade do boletim passa a ser o total da memória; fotos vão
  para o contrato (cifradas, com GPS) e para Dados\Contratos\Fotos; o diário
  cria o RDO do dia, completa o RDO aberto ou vira adendo no RDO assinado.
  Sem medição em rascunho, o retorno cria uma nova.
- O celular sempre manda tudo de novo: o que já foi importado fica de fora
  (cada linha, foto e diário tem identificador); o mesmo arquivo não entra
  duas vezes; retorno de pacote de outra base é recusado.
- Perfil Consulta não gera nem importa e não vê o PIN.

NOVO NA 0.10.0 — CARTEIRA DE CONTRATOS (painel gerencial)
- Menu "Carteira de contratos" (logo abaixo do Painel): todos os contratos numa
  tela, com SEMÁFORO e os motivos de cada contrato:
  · Crítico: vigência vencida, execução além da vigência, tendência de término
    depois da vigência, físico 15 p.p. ou mais abaixo do previsto, paralisado,
    aditivos acima do limite do art. 125, 3 ou mais prazos vencidos.
  · Atenção: vigência nos próximos 60 dias, físico 5 p.p.
    abaixo, tendência depois do prazo de execução, aditivos a 80 % do limite,
    empenho menor que uma medição média, NC ou notificação em aberto, prazo
    vencido, contrato sem fiscal designado.
  · Em dia; Encerrado (cinza, quando a situação é "Todos").
- Físico realizado × previsto: pela Curva S quando o contrato tem cronograma;
  sem cronograma, previsto = % do prazo de execução decorrido (marcado com *).
  Tendência de término pelo ritmo dos últimos meses.
- Indicadores somados (valor vigente, medido, pago, saldo a medir, saldo de
  empenho, a empenhar, físico ponderado pelo valor); filtros por situação,
  secretaria, contratada (ou contratante, no modo empresa), fonte de recurso,
  semáforo e busca — lembrados neste computador; ordenação clicando no título
  da coluna; clicar no contrato abre a ficha.
- Mapa das obras SEM internet: pontos coloridos pelo semáforo sobre a grade de
  latitude/longitude, com escala em km. Posição = latitude/longitude da obra
  (Cadastros › Obras e locais) ou a média das fotos com GPS. Com internet, o
  ponto abre no OpenStreetMap.
- Excel (abas Carteira e Resumo) e CSV; relatório "Carteira de contratos"
  (A4 paisagem, também em Relatórios › Outros relatórios) e página da carteira
  no Relatório de gráficos (botão Gráficos).

NOVO NA 0.11.0 — FILTROS, EXPORTAÇÃO E ARQUIVOS
- Contratos: painel "Opções de filtro" como o do portal da transparência —
  Exercício, Objeto, Número, Período (vigência), Nome e CNPJ do contratado,
  Modalidade, Secretaria, Contratos em vigência (Sim/Não), Terceirizados,
  Fiscal de contrato, Situação, Contratada/Contratante e Ordenar por; botões
  Pesquisar e Limpar (filtros lembrados). Campos novos no contrato: Modalidade
  do contrato e Terceirização de mão de obra.
- "Opções para exportação" (contratos, medições e arquivos): PDF, XLSX (Excel
  de verdade), CSV, JSON e TXT do que está filtrado — também gravados em
  Dados\Contratos\Planilhas.
- Importar contratos da planilha do PORTAL DA TRANSPARÊNCIA (XLSX/CSV/JSON):
  Número, Objeto, Credor/Contratado, CPF/CNPJ, Valor contratado,
  Secretaria/Contratante, Data inicial/final, Data da publicação, Modalidade,
  Fiscal, Situação e Nº da licitação. Cria sozinho as empresas (pelo CNPJ),
  as secretarias e os fiscais que não existirem; importar de novo não duplica.
- ARQUIVOS: aba "Arquivos" na ficha do contrato — anexar vários arquivos ou
  uma pasta (contrato, edital, atas, termos, publicação, aditivos, OS, boletins,
  notas fiscais, comprovantes, ART, garantia, projetos, ofícios, fotos…), com
  categoria, data e medição. Ficam cifrados no navegador e copiados em
  Dados\Contratos\Anexos\<nº do contrato>. Abrir, baixar, editar, excluir,
  "Baixar todos (.zip)". Marque o PDF do contrato como documento original:
  aparece o botão "Ver o documento original".
- Arquivos GERADOS pelo módulo (relatórios, planilhas exportadas, pacotes de
  campo, aprovações) gravados na pasta ficam registrados no contrato e abrem
  direto da pasta; os documentos emitidos também aparecem na aba.
- Medição: botão "Anexos (n)" (boletim assinado, memória, nota fiscal…);
  lista de medições com filtros de situação e período e exportação.
- Documentos › Arquivos e anexos: todos os arquivos com filtros (contrato ou
  sem contrato, exercício, categoria, origem, período, busca), exportação, zip e
  "Anexar vários / Anexar pasta" com contrato, medição e categoria sugeridos
  pelo nome do arquivo (ex.: "BM 02 contrato 012-2026.pdf").
- Ficha do contrato: barra da vigência (início, fim, hoje e "Fim da vigência
  em N dias").

NOVO NA 0.12.0 — BANCO DE DADOS CENTRAL (DOCKER · PostgreSQL)
- Pasta F:\CJR ENGPRO SYSTEM\Docker_Banco_CJR_ENGPRO: PostgreSQL 16 + API
  local (porta 8787) + Adminer (porta 8088). Ligar com SUBIR.bat (precisa do
  Docker Desktop aberto). Ver LEIA-ME.txt daquela pasta.
- O SUBIR.bat grava Dados\Contratos\banco_docker.json (endereço e token); o
  módulo lê sozinho e envia os dados automaticamente 2 minutos depois de cada
  alteração. Manual: Sistema › Importar, exportar e backup › Banco de dados
  central › Testar conexão / Enviar agora (anexos, fotos e arquivos gerados
  opcionais).
- Vai para o banco uma cópia completa e decifrada: todas as coleções (com
  valor vigente, medido, pago, saldo, vigência, semáforo calculados), os
  anexos, as fotos e os arquivos gerados (só os que mudaram — sha256). Exclusões
  ficam marcadas (histórico). Logos/assinaturas e o token não vão.
- Views prontas no esquema "contratos": contratos, medicoes, medicao_itens,
  aditivos, empenhos, notas_fiscais, pagamentos, diario, documentos, arquivos,
  resumo… (Power BI/Excel/DBeaver: localhost:5433, banco cjr_engpro).

NOVO DA 0.13.0 À 0.47.0 — MODO ÓRGÃO × EMPRESA, VAGAS, ROTAS, MÁQUINAS E COLETA EMBUTIDOS
- DOIS MODOS: Órgão público (prefeitura: ordem de serviço, medição, controle
  financeiro básico — medido/aprovado, pago, a pagar, saldos) e Empresa (mais
  detalhada: contratos de terceirização, pagamentos, caixa, bancos). Valores
  pagos a terceirizados/contratados, combustível, peças e dados bancários só
  aparecem na Empresa, no administrador e nos logins que ele autorizar
  (bloqueio por perfil — "Priv"). Cada parte guarda os dados no seu banco.
- VAGAS (59): veículos, máquinas, locados, rotas escolares e coleta; cálculo
  fixo, por km, por hora, por viagem ou por tonelada. Vaga sem veículo
  identificado (placa + modelo) fica "em aberto": não é medida nem paga.
  Movimentação do mês (medido × pago), saldos por vaga e por contrato.
- ROTAS (72): cadastro com código, turno, ensino, polo, região, itinerário,
  km, viagens/dia e dias letivos; franquia calculada; importar/exportar CSV e
  Excel, filtros e relatório em paisagem. Cadastro completo de fornecedores
  (importar/exportar).
- PAGAMENTOS A TERCEIRIZADOS (63): bruto, repasse, faltas e líquido; despesas
  lançadas na rota (combustível, peças) marcadas como repasse viram desconto
  automático do terceirizado. Relatório de pagamentos com timbrado, assinatura
  do responsável financeiro e dados bancários (restrito).
- RELATÓRIOS (71): escolha de orientação (retrato/paisagem), impressão/PDF,
  Word, Excel e salvar na pasta; assinatura do responsável financeiro.
- MODELOS DE TERCEIRIZADOS (73): contrato de terceirização, arrendamento, CLT,
  autônomo, motorista, rescisão, ofício de falta, notificação, solicitação de
  manutenção, recibo, ordem de serviço e de pagamento.
- RELATÓRIO DE EXECUÇÃO DO MÊS (53): usa as vagas do contrato, com carimbos.
- MÁQUINAS (74/75): apontamento de horímetro (horas mínimas, divisor) com
  importação/exportação CSV/Excel e relatório; importador dos dados reais do
  módulo 02, com "Apagar importação" para desfazer.
- COLETA/LIMPEZA (76): lançamentos por tonelada/viagem, totalizar no mês,
  relatório. (Importação real do módulo 04 aguarda CSV/Excel exportado de lá.)
- IMPORTADOR DO MÓDULO 03 (33 vagas/65 lançamentos dos dados reais).
- MOTOR DE IMPORTAR/EXPORTAR (51): corrigido o erro "Leitor.numPt" que
  impedia importar valores numéricos/monetários.
- TESTES NOVOS: t_vagas, t_pagtos_terc, t_med_vagas, t_ordens_orgao,
  t_medicao_contrato, t_rota_vaga, t_privacidade, t_memoria_csv, t_caixa,
  t_frota, t_import03, t_relatorios_opcoes, t_rotas_forn, t_desconto_rota,
  t_exec_mes, t_apont_maq, t_import02, t_coleta.

NOVO DA 0.48.0 À 0.54.0
- 0.48 ALERTA DE ORDENS ATRASADAS: ordens e solicitações com prazo de resposta vencido aparecem em Prazos e alertas,
  no Painel e na Carteira.
- 0.49/0.50 PACOTE EMPRESA <-> PREFEITURA (Sistema › Importar, exportar e backup): a empresa gera o arquivo
  .cjrpref.json com a parte compartilhada (contrato, vagas/rotas, medição, ordens, documentos), SEM pagamentos a
  terceiros, despesas, fornecedores, equipe, margem e dados bancários. A prefeitura importa e devolve a resposta
  (decisões, empenhos, notas, pagamentos) em outro .cjrpref.json, que a empresa importa. Mescla sem duplicar.
- 0.51 AVISOS: botão "Avisar" nos documentos e no pacote; abre o WhatsApp ou o e-mail com a mensagem pronta (você
  confere e envia; anexe o arquivo indicado). Fica registrado no histórico.
- 0.52 DIÁRIO DE OBRA AUTOMÁTICO: "Gerar diários automáticos" cria os RDOs dos dias úteis sem RDO, com equipe entre
  mínimo e máximo, equipamentos e o tempo de cada dia (histórico da Open-Meteo, precisa de internet). Chuva forte =
  dia impraticável. Os RDOs ficam abertos para conferir e assinar.
- 0.53 BLOQUEIO POR INATIVIDADE: sai sozinho após 30 min sem uso (aviso de 60 s com botão Continuar); o tempo muda em
  Sistema › Importar, exportar e backup (0 desliga). Os dados são salvos antes de sair.
- 0.54 APP DE CAMPO COM VISTORIA: o Campo.html ganhou a aba Vistoria (checklist Conforme / Não conforme / N/A com
  observação, usando os modelos do módulo: Obra geral, Pavimentação, Edificação, Serviços contínuos). A vistoria vai
  no arquivo de retorno e, ao importar, entra em Visitas e checklists. Atenção: gere um pacote novo (os modelos de
  checklist vão dentro dele) e use o Campo.html novo no celular.
- TESTES: t_campo_vistoria, t_ordens_atraso, t_pacote, t_avisos, t_diario_auto, t_inatividade.

PENDENTE: separar fisicamente os bancos Empresa × Prefeitura (pacote sem dados
financeiros da empresa); alerta de ordens atrasadas em "Prazos e alertas";
avisos/assinatura por WhatsApp/e-mail; app de campo; certificado com
reconhecimento facial; diário de obra automático; precificação/TR/proposta;
Perfil Responsável no console central; rodar LIMPAR_versoes_antigas.bat.

PRÓXIMA ETAPA
Linha no Comparativo geral, logotipo oficial e pacotes finais

COMO INSTALAR
1. Copie esta pasta (12_Contratos, com Contratos.html e Campo.html) para CJR ENGPRO\Sistemas\.
2. Copie a pasta Dados\Contratos para CJR ENGPRO\Dados\.
3. Entre pela tela de início (ENGPRO.html) e clique em Gestão de Contratos.
   (Fora da pasta do sistema o arquivo funciona sozinho: pede uma senha de dados
   própria e a pasta é conectada pelo ícone de pasta no topo.)

INTEGRAÇÃO COM O CJR ENGPRO
- Cartão "Gestão de Contratos" no catálogo do sistema (ativo) e login único
  (porta em _fontes\modulo\js\98-porta.js, núcleo 01a-engpro-nucleo.js copiado
  do SST, sem o catálogo — Contratos.html não carrega o catálogo).
- Falta: logotipo oficial do módulo (quando o PDF do Corel for enviado).

FONTES
_fontes\modulo   código (css + js)      _fontes\build\build.py   gera Contratos.html
_fontes\teste    testes automatizados (Playwright): t_etapa1..7, t_porta (login único,
                 pasta simulada por mockfs.js), t_relatorios, t_impexp, t_campo, t_carteira, t_arquivos, t_banco (API + PostgreSQL)
_fontes\campo     Campo.html (app do celular, arquivo único, sem internet)


=== v0.55.0 — App de campo: avisos, assinatura e parecer ===
- Campo.html ganhou a aba "Avisos": lista as ordens de serviço/solicitações em aberto do contrato (vão dentro do pacote de campo).
- O fiscal marca "Ciente" ou "Atendida" e assina com o dedo na tela (nome + assinatura desenhada).
- Se o pacote tem medição, o fiscal registra "Parecer favorável" ou "Parecer contrário" (contrário exige justificativa).
- Tudo volta no arquivo .cjrcampo. Ao importar no Contratos: a ordem muda de situação (Recebida/Atendida) com a assinatura guardada;
  o parecer entra no histórico da medição, SEM alterar a situação dela. A aprovação formal continua no sistema.
- A assinatura de campo é desenhada na tela: NÃO substitui a assinatura digital ICP-Brasil.
- Respostas já importadas não duplicam.

=== v0.56 — App de campo com o visual do CJR ENGPRO + versão instalável (PWA) ===
- Campo.html redesenhado: papel quadriculado de prancha, azul-marinho e verde do sistema, logotipo com canto chanfrado,
  "prancha" do contrato no topo (número, objeto, contratante, período), itens com barra de medição (medido / lançando agora /
  passou do contratado), navegação inferior com indicador verde e contador, tema claro/escuro automático. Funções iguais à 0.55.
- Pasta Campo_PWA: Campo.html + manifest.webmanifest + sw.js + icons. Publicada em endereço https (site ou servidor SaaS),
  o celular oferece "Instalar app" / "Adicionar à tela inicial" e o app abre sem internet. Sem https, use o Campo.html solto
  (WhatsApp/e-mail), que continua funcionando. Ao atualizar o Campo.html, troque a VERSAO dentro do sw.js.
- O ícone do app é provisório (CR sobre verde); troque os PNG em icons\ pelo logotipo oficial.
- Contratos.html continua na 0.55.0 (o formato do pacote e do retorno não mudou).

==================== v0.57.0 — Convite ao fornecedor (14/10/2026) ====================
Módulo 12 em modo ÓRGÃO: Sistema › Importar, exportar e backup › "Convidar fornecedor".
- Consulta o CNPJ da contratada na base do órgão: "sem cadastro", "convite enviado" ou "já cadastrada" (aceite recebido).
  A consulta ao cadastro geral da plataforma exige o servidor (SaaS); offline vale o que este banco conhece.
- Sem cadastro: gera o convite de adesão (.cjrconvite.json) com dados do órgão e do contrato (sem valores internos) e abre
  WhatsApp/e-mail com a mensagem pronta, informando que medições e controle do contrato passam a ser feitos pela plataforma.
- A empresa abre o ENGPRO.html > Registrar > "Tenho um convite de um órgão público": os dados da empresa vêm preenchidos;
  cadastra o responsável, escolhe módulos/plano e, ao final, baixa o aceite (.cjraceite.json) para devolver ao órgão.
- O órgão importa o aceite (hash conferido); a empresa passa a constar como cadastrada e a lista mostra "Aceito".
ENGPRO.html (cadastro) atualizado com o botão "Tenho um convite". Convite e aceite têm hash: arquivo alterado é recusado.
Atenção: a adesão à plataforma deve estar prevista no contrato/termo (ou ordem de serviço); validar com a assessoria jurídica do órgão.

---- v0.57.0 (complemento, 14/10/2026) — Secretarias, ordenadores e fiscais no cadastro do órgão ----
ENGPRO.html > Registrar > Empresa > tipo "Prefeitura / órgão público": aparece o bloco "Secretarias, ordenadores de despesa e fiscais".
Para cada secretaria: nome, sigla, e-mail; ordenador(a) de despesas (nome, cargo, telefone, e-mail); um ou mais fiscais de contrato
(nome, matrícula/registro, cargo, e-mail, telefone). Fica no cadastro central (Contratante) e o módulo 12 passa a ter, ao abrir:
Órgão (prefeitura) > Secretarias vinculadas (ordenador como titular) > Pessoas (ordenador e fiscais, vínculo Órgão). Não duplica por nome.

---- v0.57.1 (14/10/2026) — Importação do CSV do sistema da prefeitura + cadastro da empresa ----
Contratos > Importar: planilhas cuja coluna "Modalidade" traz o TIPO do documento (CONTRATO ORIGINAL, ADITIVO DE DURAÇÃO, ADITIVO DE ACRÉSCIMO,
REDUÇÃO, APOSTILAMENTO, ALTERAÇÃO, RESCISÃO, CERTIFICADO...) agora são tratadas: só o contrato original vira contrato; aditivos e apostilamentos entram
como FIRMADOS ligados ao contrato pelo número (prorrogação -> nova vigência; acréscimo/supressão/reajuste -> valores); rescisão marca o contrato como
rescindido; certificados e termos de seleção são ignorados; o que não tem contrato no arquivo fica de fora (a prévia informa as quantidades).
Coluna "Nome" reconhecida como empresa; CPF mascarado (***.123.456-**) não vira CNPJ; "CADASTRADO" não é situação; valor ausente no original fica R$ 0,00 com aviso.
Prévia de 8 mil linhas: de ~31 s para ~2 s; mostra as 200 primeiras linhas (todas são importadas). Caixa "Importar também aditivos e apostilamentos".
Cadastro (ENGPRO.html): e-mail do representante, e-mail institucional, endereço e CEP da empresa.

---- v0.57.2 (14/10/2026) — Documentos, medição dentro do contrato, filtros e planilhas ----
Modo Órgão automático: quando o cadastro do CJR ENGPRO foi feito como prefeitura/órgão público, o módulo abre SEMPRE no modo Órgão (a licença de avaliação
não muda mais isso). No modo Órgão somem do menu Rotas escolares, Apontamento de máquinas e Campo (celular); as telas financeiras da empresa já eram bloqueadas.
Documentos do contrato (aba Documentos): Editar e Apagar em cada linha; o documento permite edição e exclusão em qualquer situação (emitido, assinado, enviado).
A numeração já usada não é reaproveitada.
Ficha do contrato: botões Lançar medição e Convidar fornecedor (modo Órgão) e nova aba Medições (lista das medições + Lançar medição). Contrato sem planilha
(ex.: importado do CSV da prefeitura) ganha uma planilha simples de VALOR GLOBAL (1 item = valor vigente); a medição é feita pela fração executada (0,30 = 30%).
Filtro por empresa (modo Órgão) ou por órgão (modo Empresa) ao lado do seletor de contrato em todas as telas; o filtro fica lembrado.
Planilha e replanilhamento: Modelo (Excel em branco no formato de importação), Resumo dos contratos (Excel de todos os contratos do filtro), Planilha simples.
Importar (Excel, CSV, PDF ou colar) e Excel da planilha continuam como antes.
Cadastro do CJR ENGPRO: se a pasta já tem administrador (ex.: de testes), a tela de cadastro oferece "Apagar os dados de teste desta pasta e cadastrar de verdade"
(com confirmação em dois cliques e cópia automática em Dados\backups).

---- v0.57.3 (14/10/2026) — Usuários com funções e permissões ----
- Cada usuário tem função (ex.: assina documentos, lança medição, aprova) e permissões; administrador da empresa e administrador veem tudo.
- Área financeira só para a empresa; a prefeitura vê as medições e o controle financeiro básico (nada de pagamentos a terceiros, despesas, banco ou margem).
- Painel da CJR e Comercial só aparecem no modo fornecedor (abrir ENGPRO.html#fornecedor); #cliente volta ao modo normal.
- Módulos em implantação (02, 03, 04, 08) saem da lista de contratação.

---- v0.57.4 (14/10/2026) — Valor dos aditivos importados e convite com pacote ----
- Importação do CSV da prefeitura: o "Valor" de cada aditivo é lido como VALOR TOTAL do contrato após o aditivo; o sistema calcula o acréscimo ou a supressão pela diferença. Apostilamento: valor igual ou maior que o corrente = novo total; valor já contido num aditivo = não soma de novo; senão soma como reajuste. Quem importou antes deve reimportar a planilha.
- Convite ao fornecedor (.cjrconvite.json) agora leva o pacote do contrato (contrato, aditivos e planilha, sem dados bancários nem custos). Ao cadastrar a empresa com o convite, o módulo Contratos já abre com o contrato carregado (uma única vez). Convites antigos não têm pacote: gere um novo.
- ATUALIZAR_SISTEMA.bat (pasta CJR ENGPRO): atualiza o sistema de um cliente sem tocar em Dados, com cópia em _backup_atualizacao.

---- v0.57.5 (14/10/2026) — Editor de cabeçalho, rodapé e papel timbrado ----
- Sistema › Empresa, logos e assinaturas › Logo e timbrado (e Sistema › Timbrados e cabeçalhos › Editar imagens, para cada empresa/órgão): botões "Editar cabeçalho e rodapé" e "Papel timbrado (folha completa)".
- Cabeçalho e rodapé: adicione imagens, textos e "dados cadastrados"; arraste para posicionar (medidas em mm), puxe o canto para redimensionar, setas movem 1 mm, alinhe na folha (esquerda/centro/direita), troque tamanho, cor, negrito, itálico e alinhamento do texto, ajuste a altura e a linha divisória. Nos textos vale {nome} {cnpj} {endereco} {cidade} {telefone} {email} {titulo} {data}. "Modelo inicial" cria logo + dados.
- Papel timbrado de folha completa: escolha a imagem, ajuste (esticar / cobrir / caber inteira), zoom, deslocamento horizontal e vertical e as margens onde o texto começa e termina; a prévia A4 mostra as linhas do texto. Substitui cabeçalho e rodapé quando existe.
- Vale para relatórios, boletins e documentos; "Limpar" volta ao padrão. O cadastro central do CJR ENGPRO não sobrescreve o papel de folha editado aqui. Exportação para Word não preserva posições livres (use PDF/imprimir).

---- v0.57.6 (14/10/2026) — Timbrado em tela única, acesso do administrador geral ----
- Sistema › Timbrados e cabeçalhos é agora a tela única do timbrado (órgão e empresa): "Editar meu timbrado" e "Editar" em cada empresa/órgão abrem o MESMO editor, com 4 abas: Logo e imagens · Cabeçalho · Rodapé · Papel timbrado (folha completa). Empresa › Logo e timbrado apenas leva a esse editor.
- Papel de folha completa: ajuste rápido (Preencher a folha / Encaixar inteira / Esticar), arrastar a imagem na prévia e roda do mouse para zoom.
- Propagação: ao salvar o timbrado da empresa, o administrador geral atualiza também o cadastro central (portal) do CJR ENGPRO; o pacote para a prefeitura leva o logo/timbrado da empresa e, ao importar, a prefeitura atualiza o cadastro da empresa automaticamente. (Sem servidor, a atualização na prefeitura ocorre quando o pacote é trocado.)
- Assistente de redação (chave de API de IA) e gravação no portal: somente o administrador geral do CJR ENGPRO SYSTEM.


---- v0.57.7 a v0.57.11 (14/10/2026) — Menus, responsáveis, timbrado por unidade, Painel e desempenho ----
- Menus unificados (órgão e empresa), perfil Master, Responsáveis e logins, timbrado por unidade e Painel v2 com listas recolhíveis e gráficos.
- Carteira de contratos abre sem travar mesmo com milhares de registros (índices por contrato).

---- v0.57.12 a v0.57.15 — Tudo dentro do contrato, paginação e filtros ----
- Cada contrato tem abas agrupadas: Geral, Planejamento, Execução, Alterações, Financeiro, Fiscalização e Documentos (obras, tipo de medição, planilha, memorial, cronograma, medições, coleta, vagas, diário, fotos, aditivos, empenhos, notas, visitas, ofícios, relatórios...). As telas antigas redirecionam para a aba certa.
- Listas com paginação (1 a 50 por página, ou mais) e filtros padronizados que podem ser recolhidos em todas as telas.

---- v0.57.16 — Vagas e "não se aplica" ----
- Importação das vagas dos contratos (Excel, CSV, PDF ou JSON do módulo Locação de Veículos).
- Aba que não se aplica ao tipo do contrato mostra o aviso "Não se aplica a este contrato" e fica sem função.

---- v0.57.17 e v0.57.18 — Importação dos apps antigos e planilhas por empresa ----
- Importa backups criptografados dos apps antigos (Medição de Coleta .medenc e Locação de Máquinas .maqenc), pedindo a senha do backup.
- Planilhas de importação por empresa (pasta Modelos_importacao): ABA PASSO A PASSO com a ordem 1 Órgão, 2 Secretarias, Empresas, Frota, Contratos, Vagas. Contratos aceitam Secretaria, Processo e Tipo de medição.

---- v0.57.19 (14/10/2026) — Padrão de medição e de relatório por tipo ----
- Relatório de medição padrão (Relatórios › Medição, e Tipo de medição do contrato): identificação, quadro de execução do tipo, resumo financeiro, documentos que acompanham, ateste e assinaturas. O quadro muda para veículos, rotas, máquinas (horímetro), coleta (pesagens/tickets), obra, mensal e global.
- Planilha-modelo de lançamento por tipo (botão na tela Tipo de medição; arquivos em Modelos_importacao\MODELO_MEDICAO_*.xlsx). Nova importação "Medição mensal por vaga" (vaga, mês, quantidade, valor; valor medido vazio = calculado; máquinas calculam pelas horas do horímetro).

---- v0.57.20 (14/10/2026) — Relatórios financeiros dentro do contrato ----
- Nova aba Financeiro › Posição e relatórios: indicadores, alertas (saldo de empenho curto, nota atrasada, medição sem nota, falta empenhar), gráficos e atalhos.
- 7 relatórios por contrato (PDF, impressão, Word) no grupo "Financeiro do contrato" da aba Relatórios: Execução financeira, Conciliação medição x nota x pagamento (com atraso), Empenhos e saldo, Retenções e caução, Desembolso mensal, Ordem cronológica do contrato (art. 141) e Prestação de contas.
- Correção: o relatório "Execução financeira" do contrato abria a tela global de saldos; voltou ao relatório do contrato.

---- v0.57.21 (14/10/2026) — Ícone oficial ----
- O ícone da aba do navegador agora é o símbolo oficial CJR ENGPRO (Identidade_Visual\PNG\ENGPRO_icone.png). Os ícones do app de campo (Campo_PWA\icons) também.

---- v0.57.22 (14/10/2026) — Compartilhar documentos entre empresa e órgão (provisório, por arquivo) ----
- Dentro do contrato: Documentos › Compartilhar documentos. A EMPRESA marca os documentos que a prefeitura pode ver (contratos de terceirizados, CRLV, CNH, seguros, certidões...) e o ÓRGÃO marca os que a empresa do contrato pode acessar. Gerar pacote > arquivo .cjrdocs.json > a outra parte importa na mesma aba (ou em Sistema › Importar, exportar e backup).
- O pacote leva o arquivo de verdade; quem recebe guarda como "recebido" (somente leitura). Desmarcar um documento e gerar um novo pacote REVOGA o acesso (o documento recebido some do outro lado). O pacote do órgão só abre na empresa do contrato (confere o CNPJ).
- Comprovante de pagamento (dados bancários) não pode ser compartilhado pela empresa. Novas categorias de anexo: contrato de terceirização, CRLV, CNH, seguro/apólice, certidão.
- Provisório: o destinatário só recebe quando importa o arquivo. Com o servidor (SaaS) o mesmo marcador enviará automaticamente.

== v0.57.23 ==
- Menu unificado: Financeiro, Fiscalização, Documentos, Cadastros e Relatórios do contrato agora ficam em abas DENTRO do contrato (respeitando privacidade/permissões e o tipo de medição). Os itens antigos do menu redirecionam para a aba do contrato.
- Novo menu "Documentos e assinatura": criar documentos avulsos (sem contrato) e assinar PDFs com certificado ICP-Brasil; histórico de assinaturas.
- Paginação: lista "Pontos de atenção" do Painel e qualquer tabela longa (25/50/100/Todos). Listas que já tinham paginação mantêm a sua.
- Relatórios: documentos que não se aplicam ao tipo do contrato ficam inativos (cinza), com o motivo; ao trocar de contrato a lista é reavaliada.
- Aditivos: Importar/Exportar na tela Contratos; cada aditivo é vinculado ao contrato pelo número. As planilhas IMPORTAR_METAL e IMPORTAR_LOCSERVICE ganharam a aba "Aditivos" (passo 7).
- Correção: sub-aba "Importar/exportar" (motor) da tela de dados voltou a abrir.
- Requer Assinador ENGPRO 1.3.0 para pré-visualização/tamanho/posição/todas as páginas na assinatura.

== v0.57.24 ==
- Nova aba do contrato Financeiro › "Tributação (conforme a lei)": perfil tributário (esfera do órgão, regime da empresa, natureza do serviço, ISS do município, INSS) que mostra o que reter, a base, o fundamento legal e a guia/prazo:
  ISS (LC 116/2003; alíquota 2%–5% do município), INSS 11% (Lei 8.212/91 art. 31; IN RFB 2.110/2022; empreitada total em órgão público não retém), IR e CSLL/Cofins/PIS pela tabela da IN RFB 1.234/2012 (Anexo I; só a administração federal retém CSLL/Cofins/PIS; Simples Nacional/MEI não sofre retenção federal).
- "Salvar e aplicar" preenche as retenções das medições em rascunho; novas medições já nascem com as retenções do perfil. Medição, relatório e Financeiro ganharam a linha CSLL/Cofins/PIS.
- Retenções e recolhimentos: mostra o vencimento de cada guia (dia 20 do mês seguinte) e as regras do contrato. Cadastro de Empresas ganhou "Regime tributário".
- Orientação baseada na legislação vigente; a lei municipal do ISS e a % de mão de obra do INSS variam: valide com o contador.
- Correção: lista de contratos não pagina mais duas vezes.

== v0.57.25 ==
- Medições, Aprovações de medição, Troca de documentos (.cjrdoc) e Licitação/fonte/dotação agora são abas DENTRO do contrato (Execução › Medições e Aprovações; Documentos › Troca .cjrdoc; Geral › Licitação, fonte e dotação, onde dá para vincular/editar).
- Aprovações e Troca .cjrdoc continuam também no menu como "caixa de todos os contratos" (para o que chega sem vínculo). Vagas — movimentação do mês e saldos ficam no menu Financeiro e também dentro do contrato.
- O item "Medições" saiu do menu global. Órgãos, empresas, pessoas e índices seguem como cadastros gerais.

== v0.57.26 ==
- "Vagas — movimentação do mês" e "Vagas — saldos" saíram do menu global: ficam somente dentro de cada contrato (Financeiro › Vagas, com "Lançar o mês"). O relatório de vagas continua em Relatórios.

== v0.57.27 ==
- Texto da aba Vagas sem vagas ativas agora aponta para Planejamento > Vagas / postos do contrato.

== v0.57.28 ==
- Rotas escolares e Apontamento de máquinas (horímetro) agora são abas do contrato (Execução), só ativas nos contratos de rota/máquinas; saíram do menu global. Não há mais "Medições" fora do contrato.
- Medição mensal das vagas dentro do contrato mostra só aquele contrato. Contrato importado sem planilha: ao gerar a medição do mês o sistema cria a planilha a partir das vagas (1 item por vaga) e a medição sai direto (valor = soma das vagas lançadas).
- Fluxo conferido: importar Órgão > Empresas > Frota > Contratos > Vagas > Aditivos; cada vaga e aditivo cai no contrato pelo número; Financeiro > Vagas > Lançar o mês; Execução > Medição mensal das vagas > Gerar.

== v0.57.29 ==
- Texto da medição sem planilha aponta para Planejamento > Planilha. Biblioteca de assinatura: a pré-visualização da posição do carimbo agora cabe na janela (antes cortava a direita da página).

== v0.57.30 ==
- Correção: as barras de prazo e saldo voltaram ao Painel (o painel novo tinha desligado esse recurso).
- Segurança do perfil Responsável: as abas financeiras do contrato (pagamentos, tributação, retenções, notas, faturas, pagamentos a terceiros e dados bancários) e os relatórios financeiros/bancários não abrem mais para o responsável restrito, nem por link direto.
- Assinatura digital: o carimbo pode ser girado de 90 em 90° (esquerda, direita, normal) e há a opção em destaque "Assinar todas as páginas de uma vez" (vale também para vários documentos). Exige o Assinador ENGPRO 1.4 ou mais novo; para girar, instale/atualize o Assinador (arquivo Assinador_ENGPRO_1.4.0_fontes.zip em _instalacao).
- Testes antigos atualizados para as telas dentro do contrato (rotas, máquinas, coleta, vagas, medição, responsáveis, timbrado, importação do módulo 02).


=== v0.57.31 (15/10/2026) — Campo: vagas e horímetro + ajustes de celular ===
APLICATIVO DE CAMPO (Campo.html / Campo_PWA)
- Contratos com VAGAS (máquinas, km, viagens, mensal fixo) agora geram pacote de campo mesmo sem planilha.
- No celular aparece a aba "Vagas": o operador/fiscal lança, por vaga e por mês:
    * hora (máquinas): horímetro inicial e final + dias parados;
    * km / viagem: quantidade do mês;
    * fixo: confirma o mês (com observação).
- No retorno (.cjrcampo de volta) o escritório vê a tabela de vagas e aplica: o horímetro vai para o Apontamento de máquinas,
  km/viagem e fixo vão para a movimentação do mês das vagas (origem "campo"). Reimportar o mesmo retorno não duplica.
- Nenhum valor pago ao terceiro/margem vai no pacote (só dados que a prefeitura também vê). O valor ao terceiro é calculado só no escritório.
- Cache do aplicativo: campo-cjr-v0.57 (o celular atualiza sozinho ao abrir online).
AJUSTES DE CELULAR (95-mobile.js)
- Filtros começam recolhidos em telas até 700 px; aviso "dados só neste navegador" mais curto; abas com indicação de rolagem.
INSTALAÇÃO
- Contratos.html, Campo.html (módulo) e Campo_PWA\Campo.html + sw.js atualizados. Anteriores em _versoes_anteriores.
- Rodar Docker_Unificado\SUBIR.bat para publicar.
- Suíte de testes: 77 OK (inclui t_campo_vagas).


=== v0.57.32 (15/10/2026) — Módulo empresa: impostos próprios (E1) e fechamento consolidado (E4) ===
Menu Financeiro (só modo Empresa; bloqueado no modo Órgão e para o perfil Responsável):
- IMPOSTOS DA EMPRESA: por empresa e competência calcula o que a EMPRESA paga (a outra metade do que o órgão retém).
    Simples: DAS pela alíquota efetiva informada · MEI: DAS fixo · Presumido: PIS 0,65 % + Cofins 3 % (descontando o retido pelo órgão),
    IRPJ e CSLL por trimestre (base presumida 32 %, adicional de 10 %, descontando IR/CSLL retidos) e ISS próprio onde o órgão não retém.
    "Parâmetros" guarda a alíquota do Simples, base presumida e dia de vencimento. "Gerar a pagar no Caixa" cria lançamentos
    (categoria Impostos e encargos) que entram no fluxo de 90 dias e no Fechar o mês; refazer atualiza sem duplicar e não mexe no que já foi pago.
    ESTIMATIVA para provisionar caixa — valor oficial é o da guia do contador. Não inclui INSS patronal/folha nem Lucro Real.
- FECHAMENTO DO MÊS (TODOS OS CONTRATOS): medido, retenções, líquido a receber e terceiros por contrato, com 3 passos:
    1) gerar impostos de todas as empresas, 2) fechar os terceiros de todos os contratos de uma vez, 3) fechar o Caixa.
Suíte de testes: 79 OK (novos: t_impostos_emp, t_fechamento_emp).


=== v0.57.33 (15/10/2026) — Cadastros enxutos, vaga por tipo de serviço, prévia do Excel, desempenho ===
- MENU CADASTROS: Obras e locais, Licitações, Fontes e convênios e Dotações viraram UMA tela com abas ("Obras, licitações, fontes e dotações").
  Esses itens já são escolhidos dentro do contrato; o menu fica com Órgãos, Empresas, Pessoas, Fornecedores/Frota/Equipe (empresa), a tela agrupada e Índices.
- VAGA: o formulário mostra só os campos do tipo de serviço. Valor fixo → nº de veículos; por km/hora/viagem/tonelada → franquia (com a unidade no rótulo);
  máquina/por hora → horas mínimas e horímetro; rota escolar → código, turno, ensino, polo, extensão, dias letivos, alunos.
  O VALOR PAGO AO TERCEIRO e o proprietário ficam numa seção "Controle interno da empresa" no fim — não aparecem no modo Órgão nem nos pacotes.
- IMPORTAR (qualquer cadastro): nova "Pré-visualização do Excel" — mostra as colunas A, B, C… com as primeiras linhas e, em cada coluna, a escolha do campo que ela preenche.
  Aviso quando o arquivo parece ser de OUTRO cadastro (ex.: planilha de vagas sendo importada em Frota).
- DESEMPENHO: gravação automática espera 1,5 s (antes 0,7 s); observadores de tela (paginação e botões de IA) esperam mais e não forçam recálculo de layout.
Suíte de testes: 80 OK (novo: t_vaga_form_prev).


=== v0.57.34 (15/10/2026) — Vaga: controle interno completo + veículo pela placa + motorista ===
CONTROLE INTERNO DA EMPRESA (só empresa; some no modo Órgão, nas importações do Órgão e em todos os pacotes para a prefeitura):
- Proprietário/locador: nome, CPF/CNPJ, telefone.
- Valores a pagar: valor fixo / valor do mês (ou do km, hora, viagem, tonelada, conforme a forma de medição), salário do motorista, valor da diária, desconto fixo no mês + descrição.
- Dados bancários: titular, banco, agência, conta, tipo, tipo de chave PIX e chave PIX. O Relatório bancário usa estes dados (ou, se vazios, os da Equipe).
- Ao gerar o pagamento do mês ao terceiro, o desconto fixo entra como repasse e a observação vai junto.
VEÍCULO / MÁQUINA: digite a placa ou escolha na lista — puxa tipo, marca/modelo, ano, RENAVAM, situação e CRLV da Frota (e, se for de terceiro, proprietário e valor). Placa nova é cadastrada na Frota ao salvar; mudanças atualizam a Frota.
MOTORISTA / OPERADOR: digite ou escolha da Equipe — puxa CPF e CNH. Nome novo com CPF é cadastrado na Equipe ao salvar.
PROPRIETÁRIO: digite ou escolha o nome — puxa de Fornecedores o tipo de pessoa, CPF/CNPJ, telefone, e-mail, endereço e a CONTA COMPLETA com PIX (titular, banco, agência, conta, tipo, tipo e chave PIX), só preenchendo o que está vazio. Proprietário novo com CPF/CNPJ é cadastrado em Fornecedores ao salvar, com a conta e o PIX; um já existente é atualizado.
Suíte de testes: 80 OK.

=== v0.57.35 — IMPORTAÇÃO GERAL (tudo de uma vez) ===
Sistema > "Importação geral (tudo de uma vez)". Escolha UM Excel com várias abas
(Órgãos, Empresas, Proprietários, Veículos, Motoristas, Contratos, Vagas...).
O sistema reconhece cada aba pelo nome e pelas colunas, você confere/ajusta o
cadastro de cada uma e clica "Importar tudo em ordem" (contratos antes das vagas).
Vagas com placa/motorista/proprietário/banco/PIX criam Frota, Equipe e Fornecedor
automaticamente. Reimportar não duplica. No modo Órgão (prefeitura) os cadastros
internos da empresa (fornecedores, frota, equipe, caixa) não aparecem.
"Baixar modelo" gera Modelo_importacao_geral.xlsx com uma aba por cadastro.

=== v0.57.36/37 — IMPORTAÇÃO UNIFICADA E MOTORISTA DA VAGA ===
- A "Importação geral (tudo de uma vez)" agora fica dentro de Sistema > Importar, exportar e
  backup > aba "Planilhas e documentos" (o item separado do menu foi removido).
- Vaga (editar): novo campo "Quem fornece o motorista?": contrato COM motorista (empresa
  cadastra o motorista; entra na Equipe) ou SEM motorista (servidor designado pela
  prefeitura: fica só na vaga, com nome e CPF/matrícula; salário/diária somem).
  A lista de vagas mostra a etiqueta "prefeitura" e um botão Editar em cada linha.

=== v0.58.0 (15/10/2026) — CENTRAL DE IMPORTAÇÃO E EXPORTAÇÃO + MEDIÇÃO NO FORMATO DA EMPRESA ===
(montada sobre a v0.57.37 — mantém a Importação geral e o "Quem fornece o motorista" da vaga)
Sistema > "Central de importação e exportação" (primeiro item do menu Sistema).
- Escolha VÁRIOS arquivos de uma vez: Excel (todas as abas), CSV, JSON, PDF e ZIP com PDFs.
  Cada aba/arquivo é reconhecido e vira uma etapa: órgão, secretarias, empresas, frota, contratos, planilha do
  portal da prefeitura (contratos + aditivos + apostilamentos), aditivos, vagas, terceirizados, viagens por km,
  medição do mês, relatório de execução em PDF e dossiê do terceirizado em PDF. Dá para trocar o destino de cada um.
- Ordem automática (quem é referência vem antes) e SIMULAÇÃO completa numa cópia do banco: a tela mostra o que cada
  etapa cria / atualiza / rejeita já considerando as etapas anteriores. "Ver linhas" mostra cada linha e os avisos.
  Nada é gravado antes de "Aplicar"; antes de aplicar é gravada uma cópia em Dados\Contratos\Backups.
  Reimportar os mesmos arquivos não duplica. "Relatório da simulação/importação" sai em Excel.
- Relatório de execução de serviços (PDF da empresa): lê contrato, competência e as placas; lança a medição do mês
  de cada vaga pelo valor do PDF e avisa diferenças (valor, proprietário, vagas que não constam, total).
  O PDF fica ANEXADO ao contrato (categoria Medição).
- Dossiê do terceirizado (PDF do contrato de sublocação + CRLV + CNH + comprovante + PIX, avulso ou dentro de ZIP):
  cadastra/completa o terceirizado (CPF, placa, valor, PIX), liga à vaga do veículo e ANEXA o PDF ao terceirizado,
  marcado "restrito à empresa" (não pode ser compartilhado com a prefeitura). Texto de PDF escaneado: confira em
  "Ver linhas" (dá para corrigir CPF, placa, valor, PIX, banco). Se o terceirizado já existe, o PDF só completa campos vazios.
  Os anexos ficam cifrados no banco e copiados em Dados\Contratos\Anexos\<contrato>.
- Terceirizados (novo destino; Fornecedores com categoria Locação de veículo/máquina): nome, CPF/CNPJ, placa, contrato,
  valor mensal, motorista, endereço, titular, banco, agência, conta, PIX. Ao importar, os dados descem para a VAGA do
  veículo (proprietário, CPF, valor ao terceiro, banco/PIX, motorista) e para a Frota. O Relatório bancário passa a
  buscar a conta/PIX também no cadastro do terceirizado. A lista de Fornecedores ganhou a coluna Placa.
- Viagens por km (Operação > Viagens por km): uma linha por viagem (placa + secretaria + lote + item); soma no mês
  e lança a medição da vaga (km, valor contratado e, só na empresa, o líquido do terceiro).
- EMPRESA x PREFEITURA: no modo Órgão os destinos da empresa (terceirizados, dossiês, fornecedores, caixa, equipe)
  ficam bloqueados e as colunas restritas (banco, agência, conta, PIX, titular, proprietário, valor pago ao terceiro,
  salário, descontos) são IGNORADAS em qualquer destino — a tela lista quais foram ignoradas.
- Exportar tudo: um Excel no mesmo formato da importação (LEIA-ME, Órgãos, Secretarias, Empresas, Frota, Contratos,
  Aditivos, Vagas, Terceirizados, Viagens, Medição do mês). Versão EMPRESA (confidencial, com dados bancários) ou
  versão PARA A PREFEITURA (sem terceirizados, sem banco/PIX, sem proprietário e sem valor pago ao terceiro).
  O Excel volta pela própria Central (outra base, outro computador ou a prefeitura). Modelo geral em branco também.
- Portal da prefeitura: aditivo com número diferente do contrato original (ex.: 202508200008.AGRI x .AGRIC;
  202508200008.M.AMB x 202508200009.M.AMB) é ligado pelo número, sufixo e secretaria; "1º ADIT" repetido para termos
  diferentes é numerado pela data (1º = alteração 2025, 2º = prorrogação 2026).
- Vagas: "Veículo / máquina alocado" no formato "PLACA — MODELO" é separado em placa e modelo antes de ligar à Frota
  (corrige veículo duplicado na Frota ao importar as planilhas IMPORTAR_<empresa>).
- A Importação geral (Importar, exportar e backup > Planilhas e documentos) continua; a Central tem o link "modo detalhado".

RELATÓRIO DE EXECUÇÃO DE SERVIÇOS (Relatórios > Medição) — agora no formato da empresa:
ITEM · DESCRIÇÃO · LOTE · VALOR UNITÁRIO · MARCA/MODELO · PLACA · PROPRIETÁRIO/MOTORISTA (com CPF), total por extenso,
condições, conclusão, local/data do último dia do mês e assinatura. Vaga por km/hora sem lançamento no mês não entra.
Botão "Todos os contratos do mês": gera o lote inteiro (um relatório por contrato) para imprimir/PDF, Word ou salvar na pasta.

Planilha pronta: Modelos_importacao\IMPORTAR_METAL_terceirizados.xlsx — 25 terceirizados da METAL conferidos nos
PDFs (CONFIDENCIAL). Importe na Central junto com o ZIP dos PDFs. Coluna Observações = pontos a conferir antes de pagar.
Teste novo: t_central.py (40 verificações com os arquivos reais da METAL, empresa e prefeitura).

=== v0.58.1 (15/10/2026) — UM SÓ MENU PARA IMPORTAR/EXPORTAR + MEDIÇÃO DO MÊS DE TODOS OS CONTRATOS ===
Sistema > "Importar, exportar e backup" é agora o ÚNICO item de importação do menu, com 4 abas:
  1. Central — vários arquivos (Excel, CSV, PDF, ZIP)     (era o item "Central de importação e exportação")
  2. Medição do mês                                         (novo)
  3. Por cadastro (uma planilha por vez)                    (era "Planilhas e documentos" + Importação geral detalhada)
  4. Backup, pacotes e troca com a prefeitura               (era "Backup e banco": backup, pacote .cjrpref, convite, documentos)
Os botões "Importar"/"Exportar" de cada tela continuam onde estavam.

MEDIÇÃO DO MÊS (aba 2) — todos os contratos de uma vez, por competência e empresa:
  quadro por contrato: vagas, lançadas, fixas a lançar, km com/sem viagens, por hora, valor previsto e a medição gerada.
  1. Baixar planilha de conferência: uma linha por vaga (fixa = mês cheio; km = soma das viagens importadas), no mesmo
     formato de importação — anote faltas/ajustes (ex.: 27 de 30 dias = 0,9) e importe de volta pela Central.
  2. Importar planilha, viagens por km ou relatórios em PDF (abre a Central).
  3. Lançar o mês: fixas pelo mês cheio do contrato, km pela soma das viagens; vaga por km sem viagens fica com 0
     (aguardando — quando a planilha de viagens chegar, ela substitui). O que já foi lançado não muda.
  4. Gerar as medições (boletins) de todos os contratos do mês (os que já têm medição no mês não mudam).
  5. Relatórios de execução de todos os contratos (formato da empresa) — imprimir/PDF, Word ou salvar na pasta.
Corrige: o relatório em lote travava ("Maximum call stack") — nome de função repetido.

=== v0.57.38 — PADRÃO DE MEDIÇÃO DE COLETA (JP Serviços / Boa Viagem) NAS ABAS DO CONTRATO ===
Contratos de limpeza (tipo "limpeza") ganham 4 abas: Coleta: itens, frota e rotas · Cubagem (m³) · Pesagem RSS (kg) · Medição de coleta.
- Cálculo igual à planilha da prefeitura (F a N; K/M com ARREDONDAR.PARA.BAIXO, CIMA/BAIXO por item, total fixo, acumulado anterior).
- Fichas de campo numeradas, controle em Excel (exportar/importar com conferência), folgas/manutenção, previstos a conferir.
- Relatórios: boletim com extenso, memorial de cálculo, memorial de cubagem, cronograma, equipamentos, pesagem RSS.
- Botão "Carregar os dados do contrato (JP Serviços — Boa Viagem)" nos contratos 202509300001/2/3.
- Correção: excluir vaga e pagamento de terceiros agora confirma e exclui.
Pendente: Excel no modelo da prefeitura, renovação, relatório de execução/fotográfico, importar boletins PDF antigos.

=== v0.57.39 — COLETA: Excel, relatório de execução, renovação ===
- Medição de coleta: botões Excel (boletim + memorial de cálculo, nome NN_MEDICAO_CONTRATO_MES_ANO), Execução (com observações da fiscalização), Fotográfico (abre o relatório fotográfico do contrato/medição).
- Renovar período: arquiva o período, zera o acumulado e recomeça na 1ª medição.
- Importar boletins antigos (Medição de coleta › botão): aceita vários arquivos .xlsx, .csv ou .pdf (com texto) de uma vez; lê nº, período e os itens (medido G e anterior H), compara o valor K com o do boletim e só grava após a conferência. Entram como medições aprovadas/históricas; a próxima medição continua a numeração.

=== v0.58.2 (15/10/2026) — JUNÇÃO: v0.57.39 (coleta) + v0.58.1 (Central de importação, menu único, medição do mês) ===
A v0.57.38/39 foi instalada por outra conversa a partir de fontes antigas e REMOVEU do sistema a Central de importação,
os terceirizados, a medição do mês e o relatório de execução no formato da empresa (o texto da v0.58 continuava neste
LEIA-ME, mas o código não estava no Contratos.html). A v0.58.2 junta as duas linhas: tudo da coleta (v0.57.38/39) +
tudo da v0.58.0/0.58.1. Testado: t_central (44 OK), coleta (padrão, histórico, seed), importação geral, vagas,
pagamentos a terceiros, pacote, privacidade, motor, execução, medição das vagas, portal.
>>> QUEM FOR CONTINUAR ESTE MÓDULO: parta SEMPRE do _fontes_Contratos_v0.58.2.zip (ou mais novo). Fontes antigas
>>> (v0.57.x) não têm os arquivos 97c, 98b, 98c e 98d — instalar a partir delas apaga a Central de importação.

=== v0.58.4 (15/10/2026) — E0: BASE CONGELADA + CORREÇÕES DE ERROS LATENTES (sem mudança de regra) ===
Primeira etapa do plano de unificação (ver claude/diagnostico-unificacao-2026-10-15.md no Projeto).
Base: _fontes_Contratos_v0.58.3.zip (idêntico ao Contratos.html instalado). Nada foi removido.
Correções:
- Importar do módulo Locação de Veículos (03): vaga por KM ficava com valor medido 0 na movimentação do mês
  (lia campos inexistentes). Agora medido = soma de viagem.valorTotal do lançamento. O pago ao terceiro não mudou.
- Importar backup de apps antigos (.maqenc/.medenc): o backup do Rotas Escolares (08) era confundido com Coleta.
  Agora é recusado com aviso para usar a Central de importação (o importador do 08 chega na etapa E5).
- Pagamento a terceiro: a prévia ao vivo (digitando no formulário) usa Form.ler no modo silencioso e não
  dispara mais o aviso "Preencha ..." a cada tecla (parâmetro novo, opcional; o uso normal não mudou).
- Relatório de medição padrão (tipo obra): a contagem "registro(s) de diário de obra" lia a coleção 'rdo'
  (inexistente) e dava sempre 0; agora lê 'diario'.
Teste novo: teste/t_e0_correcoes.py (9 OK). Suíte completa comparada com a v0.58.3 (mesmos resultados).
Próxima etapa: E1 — núcleo ENGPRO compartilhado em Sistemas\_bibliotecas (tirar as 13 cópias).

=== v0.58.5 (15/10/2026) — E1: NÚCLEO ENGPRO COMPARTILHADO ===
O bloco EngDB/EngCofre/EngLicenca (antes 01a-engpro-nucleo.js, embutido no build) saiu do Contratos.html e passou a ser
Sistemas\_bibliotecas\engpro_nucleo.js, carregado por <script src="../_bibliotecas/engpro_nucleo.js"> antes do script principal
(mesmo arquivo usado pela tela de início, pelo console e por todos os módulos — antes eram 13 cópias, em versões diferentes).
Efeito no módulo: nenhum na operação. O catálogo completo (16) passa a estar disponível (antes o módulo tinha uma lista mínima);
o módulo continua NÃO sincronizando o catálogo com o banco central. Para rodar fora da pasta CJR ENGPRO, a pasta _bibliotecas
precisa estar ao lado (como já era para cjr_assinatura.js). Suíte: igual à v0.58.4.

=== v0.59.0 (15/10/2026) — E2a: ENXUGAMENTO (parte 1) — nada de regra de negócio mudou ===
Removido (código que já não era alcançado): tela antiga do Painel (08; vale a do 56), "Execução financeira do contrato" antiga (17;
vale o relatório financeiro do 58 e os relatórios por contrato do 88), "Relatório de execução" antigo (53; vale o 98c), Org.responder
antigo (29; vale o do 40), RelMed.assinaturasContrato antigo (15; vale o do 34), funções sem uso (Plan.etapaDe, Campo.baixarApp,
Charts.cols, CP.rotItem, Terc.vagasDa), variáveis sem uso (45, 56, 75), botão fantasma #mXls (14), 'rel_caixa' das listas de
bloqueio (tela não existe).
Bloqueio por inatividade: havia DOIS ao mesmo tempo (um fixo de 20 min no 99 e o configurável no 80). Fica só o configurável:
Sistema › Importar, exportar e backup › "Bloquear após N minutos" (padrão 30; 0 desliga).
Unificado no 00-util: soDig (4 cópias iguais), normTxt (3 cópias iguais: ImpExp/Motor/Imp02.norm), Mes.seg/ant/fim/rot/rotCurto
(11 helpers de mês repetidos). Equivalência conferida por teste (t_e2_enxugar.py, 6 OK). Suíte: igual à anterior.

=== v0.59.1 (15/10/2026) — E2b: MENU COM FILTRO ÚNICO E PAGINAÇÃO ÚNICA — nada do que cada perfil vê mudou ===
Menu: as regras de visibilidade (modo Órgão/Empresa, permissão "ver o financeiro", perfil Responsável, conta Master, relatório
bancário restrito) passaram a ser aplicadas num único lugar (UI.menuVisivel / UI.menuFiltrado no 03-shell). Cada regra continua
declarada no arquivo dono (Priv.BLOQ, Perm.FIN, Acesso.RESTRITOS, Resp.pode, Banc.pode); saíram 9 "embrulhos" de UI.nav.
Prova: retrato do menu em 32 combinações (modo × perfil × tela) idêntico antes/depois (teste/menu_retrato_v0590.json; t_e2b_menu_pag.py).
Paginação: contratos, carteira, prazos e cadastros (Pag) continuam cortando a lista nos dados (leve), mas a barra e o tamanho de
página são os mesmos das outras tabelas (Pager): 25 / 50 / 100 / Todos, uma só preferência (cjr.pager.tam; a antiga cjr.pag.lim é migrada).
Suíte: 621 OK; t_paginacao_docs ajustado (a barra do Pag agora é a do Pager, continua sem paginação dupla).

=== v0.59.2 (15/10/2026) — E3: TIMBRADO E RELATÓRIOS SEM CAMADAS — relatórios saem iguais ===
Cabeçalho, rodapé, página A4, assinaturas e a tela padrão dos relatórios passavam por até 6 "embrulhos" (36, 37, 38, 38b, 39, 71).
Agora cada um é uma função só: Relatorios.cab/rodape/assinaturas/assFin/pagina/folhaBg/tela/controlesPag/imprimir/docHtml (09)
e Timb.parte/cabHtml/rodHtml (36). O arquivo 71-relatorios-opcoes.js foi absorvido pelo 09. O "Formato e assinaturas" virou Fmt.abrir (37).
Prova: 750 trechos de HTML de relatório em 15 cenários de timbrado/modo/formato idênticos antes e depois (teste/rel_retrato_v0591.json;
t_e3_relatorios.py). Catálogo de modelos: 87 chaves, nenhuma repetida — mantido (cada arquivo registra os seus). Suíte: 624 OK.

=== v0.60.0 (15/10/2026) — E4: DESEMPENHO (sem mudar a estrutura do banco) ===
- Cache "de uma passada" (Passada, 00-util): Contrato.calc é calculado uma vez por tela (Carteira e Painel chamavam por linha);
  DB.get e Vg.mov usam índice quando a coleção é grande. O cache morre no fim da tarefa do navegador e em Store.mudou — nunca
  devolve dado velho depois de uma edição.
- Gravação: a conversão base64 do pacote cifrado passou para fora da thread principal (FileReader). Com um banco de 6 MB a tela
  fica ocupada ~60 ms por gravação (antes ~250 ms).
- Registro de telas lentas: qualquer tela que demore mais de 0,4 s fica anotada neste navegador (Sistema › Registro de atividades ›
  "Desempenho", com o tamanho da base). Use para informar ao suporte onde o sistema trava no uso real.
Medido (100 contratos, 400 vagas, 611 lançamentos): DB.get/Vg.mov 14× mais rápidos; Painel 26→20 ms; Contratos 15→10 ms; Carteira 35→29 ms.
Testes: t_e4_desempenho.py (7 OK); bench.py (teste/) para medir de novo. Suíte: 630 OK.

=== v0.61.0 (15/10/2026) — E5: FROTA, ROTAS E TERCEIRIZADOS (regras do Frota 5.0 e do Rotas Escolares dentro do módulo) ===
MUDANÇA DE REGRA (decidida pelo Carlito): PAGAMENTO POR KM VEM DAS VIAGENS LANÇADAS.
- Contrato/vaga por km: o pago ao terceiro = soma do "líquido terceirizado" das viagens do mês (Operação › Viagens por km, ou Central de
  importação); viagem sem líquido informado = km × valor por km do terceiro. A franquia da vaga virou só referência: km acima dela
  mostra o selo "+franquia" no pagamento e o ponto de atenção "Km" no Painel. Sem viagens no mês, vale o km digitado no lançamento
  (campo "Km no mês (se não houver viagens lançadas)"); "Gerar lançamentos do mês" não preenche mais a franquia.
  Exemplo: franquia 3.000 km a R$ 6,00, viagens 1.000 + 500 km → antes R$ 18.000,00; agora R$ 9.000,00.
- Fornecedor por repasse: no pagamento ao terceiro, cada repasse digitado (combustível, taxas, outros) pode ter o fornecedor; na baixa,
  esses repasses viram conta a pagar (pendente) ao fornecedor no Caixa (origem ptf:…); o estorno remove. Sem fornecedor, nada muda.
  Relatório novo "Descontos por fornecedor (mês)" (botão "Por fornecedor" em Pagamentos aos terceirizados; só Empresa).
- Importar backup do Rotas Escolares (08): Caixa › "Importar do módulo Rotas" (ou Rotas escolares › Importar backup). Rotas → vagas de
  rota do contrato escolhido (fórmula → km com franquia = km/dia × dias letivos; fixo; por viagem), motoristas → Equipe (favorecido;
  motorista físico na observação), veículos → Frota, lançamentos → Pagamentos aos terceirizados com o MESMO líquido do Rotas (os pagos
  geram a saída no Caixa), fornecedores, NF e despesas gerais → Caixa. Reimportar não duplica (origem 08:…). Alocações manuais de
  repasse não são importadas (aviso).
- Importar do Locação de Veículos (03): agora traz aditivos (acréscimo/supressão/apostilamento/vigência) e fornecedores, e abre o
  backup PROTEGIDO (cofre: usuário e senha de lá; escolha da empresa quando o cofre tem várias).
- Frota: registro de transporte de passageiros — licença ARCE (nº, validade; vence em Prazos e alertas) ou cadastro DETRAN (NUP, situação).
- Vaga "extra" sem veículo entra em "Gerar lançamentos do mês" pelo valor combinado com o terceiro.
Testes novos: t_e5_km_forn (11), t_e5_rotas (12), t_e5_imp03 (7, com cofre gerado por gera_cofre03.mjs), t_e5_frota (6). t_pagtos_terc
ajustado para a regra nova. Suíte: 665 OK, 0 FALHA. Pendente (decisão): rateio por quem dirigiu cada viagem e "favorecido" em cadeia.

=== v0.62.0 (15/10/2026) — E6: FOLHA GERENCIAL DA EMPRESA (os 10 módulos do Folha Offline dentro do módulo 12) ===
Só no modo EMPRESA e só para quem tem permissão "ver o financeiro". Nova seção do menu "Folha da empresa":
  Painel da folha · Funcionários · Folha do mês · Férias · Empréstimos e acordos · Rescisões · Equipamentos e localidades ·
  Despesas extras · Resumo financeiro · Relatórios (PDF) · Documentos (contrato, termo de rescisão, recibo, ofício, EPI).
- É o código do Folha Offline (módulo 05) transplantado SEM mudar as fórmulas: salário com insalubridade, bruto/descontos/líquido,
  férias (salário/30 × dias × 4/3), ciclos aquisitivos, empréstimos (saldo e baixa única por mês), rescisão (estimativa), resumo
  (lucro = entradas − despesas), leitura dos PDFs de férias e de consignado, PDFs com tabela ajustada. Manual: _fontes/folha/MANUAL_MODULOS.md.
- FUNCIONÁRIOS = cadastro EQUIPE do módulo (Cadastros › Equipe). Quem já estava na Equipe aparece na folha; quem é cadastrado pela
  folha aparece na Equipe. Campos: salário (vigente) e admissão são os mesmos; insalubridade (%), local de trabalho, PIX/banco e
  histórico de salário vêm do Folha. Situação "rescindido" do Folha = "desligado" do módulo.
- As demais coleções (folhas, férias, empréstimos, acordos, rescisões, terceiros e valores, despesas extras, entradas, observações)
  entram no MESMO banco cifrado do módulo (prefixo fo…): uma senha, uma pasta de trabalho, um backup.
- Dados da empresa, representante e CNPJ vêm de Sistema › Empresa; o carimbo e o número do próximo ofício ficam guardados junto.
- Importar o backup do Folha Offline (05): Painel da folha › "Importar backup do 05" (backup_folha_*.json; escolhe a empresa se o
  arquivo tiver várias). Funcionário com o mesmo CPF/nome liga ao já cadastrado (sem duplicar; completa local/insalubridade/PIX);
  lançamentos, férias, empréstimos etc. vêm com o vínculo certo. Reimportar não duplica.
- PDFs usam a biblioteca local (_bibliotecas/jspdf_lite.min.js) — funciona sem internet. Leitura de PDF (férias/consignado) usa o
  mesmo leitor do módulo (pdf.js local).
- Período (competência) da folha: regra do Folha — até o dia 10 abre no mês anterior; depois, no mês corrente. Muda nas telas.
AINDA NÃO (fica para a E7): despesas extras e entradas da folha ainda não aparecem no Caixa/fechamento do módulo (são telas próprias);
  "Dados da empresa" do Folha (tela) não foi trazida — use Sistema › Empresa; o tipo de vínculo do Folha (clt/autônomo nos contratos)
  é separado do vínculo da Equipe. Módulo 05 continua funcionando como está; descontinuação só na E7, com você.
Para o programador: _fontes/folha/ (adaptador.js + codigo/ do Folha) gera modulo/js/89-folha-empresa.js no build (build/gerar_folha.py).
Testes: t_e6_folha.py (26 OK — exemplos numéricos do manual, telas, modais, importador, PDF, bloqueio Órgão/permissão).
Retrato do menu atualizado (menu_retrato_v0620.json: só o modo Empresa ganhou a seção). Relatórios: 750 retratos iguais. Suíte: 692 OK, 0 FALHA.

=== v0.63.0 (15/10/2026) — E7: FOLHA DA EMPRESA DENTRO DO CAIXA, DO FECHAMENTO DO MÊS E DO RESUMO ===
- A folha agora aparece no CAIXA DA EMPRESA como espelho (descrição "Folha · …"): o líquido de cada lançamento da folha (pendente ou
  pago, com a data do pagamento), cada valor mensal de equipamento/localidade, cada despesa extra e cada entrada avulsa da folha.
  Categorias: Mão de obra / folha · Terceiros e locações · despesa extra pela categoria (aluguel/escritório → Administrativo,
  material/aquisição → Materiais, outro → Outras despesas) · entrada → Receita (nota fiscal).
- A folha é a FONTE: editar/excluir na folha refaz o espelho; editar o espelho no Caixa não adianta. Dar BAIXA no Caixa (ou no
  "Fechar o mês") num espelho pendente volta para a folha: o lançamento/valor fica pago com a data da baixa.
- Fechamento do mês (todos os contratos) › passo 3 "Fechar o Caixa" lista também a folha pendente do mês.
- Resumo financeiro (folha): quadro "Resultado unificado" no topo = recebimentos do módulo (Financeiro › Pagamentos) + entradas
  avulsas da folha − despesas do resumo da folha. O lucro do Folha (só entradas avulsas) continua abaixo, igual ao original.
- Nada muda no modo Órgão (a sincronização não roda).
ATENÇÃO: quem já digitava a folha à mão no Caixa vai ver em dobro — apague os lançamentos manuais (os espelhos têm "Folha ·").
Testes: t_e7_folha_caixa.py (16 OK). Suíte: 708 OK, 0 FALHA. Menu e relatórios iguais à 0.62.0.
Módulo 05 (Folha Offline) continua instalado e intocado — descontinuar depende do OK do Carlito.

=== v0.64.0 (15/10/2026) — E8: MODO IMPOSTO PELA CHAVE DE LICENÇA + VERSÃO NO REGISTRO (painel master) ===
- A chave de licença pode trazer o MODO (órgão público ou empresa). Com ela, o módulo fica travado nesse modo: a prefeitura
  nunca vê o lado empresa (pagamentos a terceiros, Caixa, folha), e Sistema › Licença e modo mostra "Modo definido pela chave".
  Chaves antigas (sem modo) continuam como sempre: o cliente escolhe o modo.
- O módulo grava sua versão no registro de uso do CJR ENGPRO (usoModulos.contratos.versao): o console 01 v1.1 informa isso no
  registro da instalação e no "relatório da instalação", e o painel da CJR mostra quem está desatualizado.
- Precisa do núcleo compartilhado Sistemas\_bibliotecas\engpro_nucleo.js da E8 (2026.10.15-E8) e do console 01 v1.1 — vão juntos.
Testes: t_e8_modo_licenca.py (9 OK). Suíte: 718 OK, 0 FALHA. Menu e relatórios iguais à 0.63.0.

=== v0.65.0 (15/10/2026) — E9: SINCRONIZAÇÃO COM O BANCO CENTRAL (Docker) — offline-first de verdade ===
O navegador continua sendo a fonte dos dados; o banco PostgreSQL do Docker é espelho. Novidades em Sistema › Importar, exportar e backup › Banco de dados:
- EXCLUSÃO EXPLÍCITA: o que você apaga fica anotado e vai ao banco como exclusão. O banco NÃO marca mais como removido o que "faltou" no envio
  (antes, uma pasta copiada para outro computador podia apagar no banco o que só existia no outro). Exige a API 1.1 (api/server.js desta etapa).
- ENVIO PARCIAL: "Enviar agora" manda só o que mudou desde o último envio (+ exclusões); "Reenviar tudo" faz o envio completo.
- DADOS SENSÍVEIS FORA POR PADRÃO: folha da empresa, Caixa e pagamentos a terceiros não saem do computador (opção "não enviar folha, Caixa e
  terceiros" — desmarque se quiser mandar).
- RECEBER DO BANCO: traz o que outros computadores da MESMA EMPRESA (mesmo CNPJ em Sistema › Empresa) mandaram. Regras: por registro vence o mais
  novo (atualizadoEm); apagado em algum lugar some aqui; se o registro mudou aqui E lá desde a última sincronização, entra na lista "Conferir"
  (você escolhe "Manter o meu" ou "Usar o do banco"). O que veio do banco nunca é reenviado como se fosse seu.
- PASTA COPIADA: se a cópia dos dados abrir em outro computador (instalação do CJR ENGPRO diferente), ganha uma base nova — não mistura com a antiga.
- Correção: a configuração do banco era recriada a cada leitura e o "último envio" podia não ficar gravado.
Servidor: Docker_Banco_CJR_ENGPRO\api\server.js 1.1.0 (POST /api/sync com v:2 + removidos; GET /api/receber?modulo&cnpj&desde). Pacotes antigos
(cjr_banco.js do console) continuam aceitos com o comportamento antigo. Depois de trocar o server.js: Docker_Unificado\SUBIR.bat (rebuild da API).
Testes: t_e9_sync.py (16 OK, dois navegadores contra API + PostgreSQL 16 reais). Suíte: 734 OK, 0 FALHA. Menu e relatórios iguais.

=== v0.65.1 (15/10/2026) — E12 (parte 1): DADOS REAIS FORA DO SISTEMA ===
- O carregador "Carregar os dados do contrato (JP Serviços — Boa Viagem)" — que trazia CPFs, placas e nomes de motoristas reais dentro do
  Contratos.html de TODOS os clientes — saiu do arquivo. Agora fica em Sistemas\12_Contratos\Modelos_importacao\seed_coleta_JP_BoaViagem.js
  e é carregado só ao clicar no botão (que continua aparecendo nos contratos 2025.09.30.0001/0003). Em instalações de outros clientes, apague
  esse arquivo (ou simplesmente não o copie): o botão avisa que os dados não estão disponíveis.
- Nenhuma regra mudou. Fontes: o antigo 96h-coleta-seed.js está em _fontes/_removidos; o arquivo carregável em _fontes/modulo/dados.
Suíte: 734 OK, 0 FALHA (t_coleta_seed e t_coleta_historico passaram a carregar o arquivo externo antes).

=== v0.66.0 / v0.67.0 (15/10/2026) — E12 (decisões do Carlito): LIXEIRA · IMAGENS FORA DO PACOTE · MÓDULO 05 DESCONTINUADO ===
LIXEIRA (0.66.0)
- Tudo que é excluído (contratos, medições, lançamentos, fotos, anexos, vagas, pessoas…) vai para Sistema › Importar, exportar e backup ›
  Lixeira, por 60 dias (até 500 itens). "Restaurar" devolve o registro ao lugar (e ao banco central); "Excluir definitivamente" apaga de vez.
  Fotos e anexos: o arquivo só sai do navegador quando o item deixa a lixeira (antes era apagado na hora).
IMAGENS FORA DO PACOTE CIFRADO (0.67.0)
- Logos, timbrados, carimbos, assinaturas e imagens do editor de layout (base64 com mais de 20 KB) não vão mais dentro do pacote principal:
  ficam cifradas uma a uma no IndexedDB (loja "fotos", chaves ext:*), como já acontecia com fotos e anexos. A mesma imagem usada em vários
  cadastros ocupa um lugar só. Pacote e gravação ficam proporcionais aos dados, não às imagens. Backup completo e restauração continuam
  levando tudo; pacotes antigos abrem normalmente e são convertidos na primeira gravação.
  ATENÇÃO: um pacote gravado pela 0.67.0 aberto numa versão anterior fica com as imagens vazias — para voltar de versão, restaure um backup.
MÓDULO 05 (Controle Financeiro / Folha Offline) DESCONTINUADO
- Catálogo 17 (engpro_nucleo.js 2026.10.15-E12): o 05 sai da tela de início e das listas de módulos/planos. O arquivo continua na pasta e
  abre com uma faixa "descontinuado" — use só Backup › Exportar e importe em Gestão de Contratos › Painel da folha › Importar backup do 05.
Testes: t_e12_lixeira_externo.py (11 OK). Suíte: 745 OK, 0 FALHA. Menu e relatórios iguais. Desempenho igual (gravação 29 ms com 584 KB).

=== v0.68.0 (15/10/2026) — E12.1 (pedidos do Carlito): FOLHA DA EMPRESA NO PADRÃO VISUAL DO SISTEMA ===
- Barra padrão do módulo em todas as telas de lista da Folha (Funcionários, Folha do mês, Férias, Empréstimos e acordos,
  Rescisões, Equipamentos e localidades, Despesas extras, Resumo financeiro): "Buscar na tela" (filtra as linhas ao vivo),
  filtro por situação (Pago / Pendente / Ativo… — as etiquetas que a tela já mostra), Importar (abre o importador em lote
  que a própria tela já tinha; onde não há um, o backup do Folha Offline 05) e Exportar ▾ (PDF, XLSX, CSV, JSON, TXT com as
  linhas visíveis depois do filtro, uma aba por tabela — gravado em Dados\Contratos\Planilhas).
- Resumo financeiro ganhou o quadro "Movimento do mês": TODAS as saídas e entradas da empresa na competência — Caixa
  (inclusive o espelho da folha, origem "Folha"), recebimentos de medições (Financeiro › Pagamentos) e entradas avulsas —
  com entradas, saídas, "ainda a pagar" e saldo. É só leitura: nenhum cálculo ou regra mudou; o "Resultado unificado" e o
  "Lucro do período" continuam iguais (o movimento soma também as saídas do Caixa que não são da folha, por isso pode ser maior).
- Tema escuro: a lista do "Tipo de contrato" (e de todo <select> da Folha) ficou legível no Windows; os números das
  tabelas e dos cartões usam a fonte do sistema (tabular), não mais a monoespaçada do Folha antigo.
- A seção "Folha da empresa" continua só do modo Empresa (fin:true): escondida e bloqueada no modo Órgão e para quem não
  tem permissão financeira. Relatórios (PDF) e Documentos ficam separados (números do período × papéis por colaborador).
Fontes: novo modulo/js/89c-folha-ferramentas.js; CSS no build/gerar_folha.py. Suíte: 745 OK, 0 FALHA (t_e9_sync com API local).

=== v0.69.0 (15/10/2026) — E13: PLANILHA PADRONIZADA DA FROTA (modelo_importacao_frota_*.xlsx) ENTRA INTEIRA PELA CENTRAL ===
Como importar: Sistema › Importar, exportar e backup › aba "Central" › Escolher arquivos › escolha o(s) modelo_importacao_frota_*.xlsx
(pode ser vários de uma vez, ex.: METAL e LOCSERVICE) › confira a prévia › "Aplicar". Antes de aplicar o sistema grava uma cópia em Backups.
- A aba "Secretarias_Vagas" é reconhecida como "Planilha da frota (03)" e, de UMA aba, cria/atualiza na ordem certa:
  1. Órgãos: "Prefeitura Municipal de <município>" (pai) + cada Secretaria (reaproveita as já cadastradas, pelo nome).
  2. Contratos: pelo "Contrato Numero" (reaproveita o existente). Contrato novo nasce com objeto "Locação de veículos e máquinas — <secretaria>",
     empresa = a sua (Sistema › Empresa), medição por vagas, valor = 12 × soma mensal das vagas e vigência de 12 meses a partir da competência
     da planilha — MARCADO NA OBSERVAÇÃO COMO ESTIMADO: confira valor e vigência no contrato depois.
  3. Vagas: lote/item, descrição, FIXO (valor mensal) ou KM (R$/km + franquia), situação (ATIVO/ABERTO/EXTRAS/INATIVO; "Pago pela Prefeitura = NÃO"
     vira Extra), veículo → Frota (placa, marca+modelo, ano, RENAVAM, CRLV), motorista com CPF → Equipe, proprietário + CPF/CNPJ + banco/agência/
     conta/PIX → Fornecedores, "Valor Mensal" = valor pago ao terceirizado (R$/km terceirizado nas vagas por km). "Apelido" vai para a observação.
  4. Valores do mês: para a "Competencia" de cada linha lança a medição da vaga (valor do contrato) e o valor pago ao terceiro — só se o mês
     ainda não tiver movimentação (nada já lançado é sobrescrito). Importar o mesmo arquivo de novo não duplica nada.
- Linha com o mesmo contrato/lote/item repetida no arquivo: vale a que tem placa (a outra vira aviso). CPF/CNPJ inválido do proprietário não
  bloqueia a linha: fica anotado na observação da vaga para corrigir. Abas auxiliares só com placa/modelo/marca entram em Frota.
- Modo Órgão: a mesma planilha entra, mas proprietário, banco, PIX e valor do terceirizado são ignorados (como no resto da Central).
Fontes: novo modulo/js/98e-planilha-frota.js (PlanFrota); 98b mostra "N contrato(s) · N órgão(s) · N mês(es) lançado(s)" na prévia.
Teste: t_e13_planilha_frota.py (17 OK, dados sintéticos). Suíte: 762 OK, 0 FALHA.

=== v0.70.0 (15/10/2026) — E13.1: MODELO PADRÃO DA PLANILHA DA FROTA + BOTÕES DA FOLHA NO PADRÃO DO SISTEMA ===
- Central › botão "Modelo da planilha da frota (Excel)" baixa modelo_importacao_frota_PADRAO.xlsx: aba Secretarias_Vagas (linha de instrução +
  cabeçalho de 52 colunas + 2 linhas de exemplo — apague os exemplos), aba Instruções (coluna a coluna: o que é, obrigatória, exemplo) e aba
  LEIA-ME (passo a passo do que o sistema cria). O mesmo arquivo fica em Sistemas\12_Contratos\Modelos_importacao\. Preencha e importe pela Central.
- Varredura dos botões: todas as telas da Folha da empresa usam os mesmos botões do módulo (.btn branco com borda, .btn.pri verde para a ação
  principal — o antigo "accent" âmbar virou verde —, perigo vermelho, pequeno, "Editar" como link verde), cartões e KPIs com a mesma borda
  superior colorida, sombra e raio do resto do sistema. Fora da Folha os botões já eram uniformes (auditoria em todas as telas, claro e escuro).
- Correção no motor de importação: cadastros com chave composta (vagas, caixa, viagens, medição mensal, aditivos) não são mais "achados" pelo
  CPF/CNPJ de um campo (uma vaga não é o CPF do proprietário) — reimportar a planilha da frota não misturava, mas podia marcar como "atualiza".
Suíte: 763 OK, 0 FALHA (t_e13_planilha_frota 18 OK, inclui ida e volta do modelo).

=== v0.70.1 (15/10/2026) — E13.2: UM SÓ "IMPORTAR ▾" NAS TELAS DA FOLHA ===
- Os botões de importação que cada tela da Folha tinha espalhados ("Importar em lote", "Importar folha de um backup", "Importar folha completa",
  "Importar PDFs (aviso/demonstrativo)", "Importar consignado (colar relatório)") saem da tela e viram as opções do menu Importar ▾ da barra
  padrão, sempre com "Importar backup do Folha Offline (05)" no fim. Nenhum importador foi removido — só mudou de lugar.
- Hover dos botões da Folha no padrão (borda verde, fundo igual) — antes ainda ficava verde cheio.

=== v0.71.0 (18/10/2026) — E14: "O QUE FAZER HOJE" NO PAINEL ===
- O Painel abre com a lista de pendências do dia, cada uma com o botão "Abrir" que leva direto à tela certa. Só aparece o que tem pendência;
  sem nada, o cartão diz "Nada pendente — tudo em dia". Itens (empresa): medição do mês anterior não lançada (contratos por vagas) → Medição do mês;
  medições devolvidas pelo fiscal / em rascunho → Medições; contratos importados com valor e vigência estimados → o contrato (ou a lista);
  vagas abertas sem veículo → Vagas; vencimentos da frota (CRLV, seguro, revisão, ARCE) e da equipe (CNH, ASO, NR) vencidos ou em 30 dias;
  prazos críticos dos contratos (sem repetir frota/equipe) → Prazos; notas fiscais atestadas/liquidadas sem pagamento → Notas fiscais;
  terceirizados a pagar do mês anterior → Pagamentos aos terceirizados; aditivos em tramitação; itens da lixeira a expirar em 7 dias.
- Modo Órgão: medições aguardando aprovação → Aprovações; notas liquidadas a pagar; contratos estimados; vagas abertas; prazos. Nada de
  terceirizados, frota, equipe, caixa ou folha. Vermelho = atrasado, âmbar = atenção, verde = informativo.
- Nenhum cálculo novo: cada item usa a mesma conta das telas que já existem (MedMes, Prazos, Pt, Vg). Fonte: modulo/js/56c-painel-hoje.js.
Teste: t_e14_painel_hoje.py (12 OK). Suíte: 774 OK, 0 FALHA (retrato dos relatórios passou a ignorar "Em N dias").

=== v0.72.0 (18/10/2026) — E15: VIAGENS POR KM LANÇADAS NO CELULAR (Campo.html) ===
- Campo (celular) › Vagas › vaga por km: em vez de um total do mês, o motorista/encarregado lança CADA VIAGEM (data, destino/trecho, km);
  a lista fica no aparelho, pode apagar, e o total do mês é a soma. Quem não tem a lista ainda pode informar só o total ("Sem a lista de viagens?").
- Escritório › Importar retorno: cada viagem vira um registro em "Viagens por km" (placa, lote/item, data, destino, km, R$/km do órgão e,
  na versão empresa, R$/km do terceiro) e o mês da vaga passa a ser a soma das viagens (mesma regra do "Lançar o mês": medido = km × R$/km do órgão,
  pago = km × R$/km do terceiro). Dias parados e observação do celular vão para o mês. Reimportar o mesmo retorno não repete nada; viagem nova
  no celular entra sozinha no próximo retorno.
- Atualize também Campo.html e Campo_PWA\Campo.html (o celular precisa da versão nova para mostrar a lista de viagens).
Teste: t_e15_campo_viagens.py (9 OK). Suíte: 774 OK, 0 FALHA.

=== v0.73.0 (18/10/2026) — E16: REMESSA DE PAGAMENTO AOS TERCEIRIZADOS ===
- Financeiro › Pagamentos aos terceirizados › botão "Remessa (por favorecido)": agrupa os lançamentos pendentes do mês por quem recebe
  (CPF/CNPJ do proprietário; um dono com 3 veículos = 1 linha, 1 transferência), com banco/agência/conta/PIX, veículos/vagas e o líquido.
  Avisa quem está sem dados bancários (complete na vaga › proprietário, ou na Equipe).
- "Exportar remessa ▾" (XLSX/CSV/PDF…): uma linha por favorecido — para o internet banking / PIX em lote. "Recibos": os recibos da remessa.
  "Dar baixa na remessa": uma data para todos os lançamentos — cada um fica pago e a saída vai para o Caixa (mesma baixa de sempre, Pt.baixar).
- Recibo de terceirizado agora traz o pagador (razão social + CNPJ) e o CPF/CNPJ e PIX (ou banco) do favorecido.
- Acesso restrito como o relatório bancário: versão Empresa, administrador ou login liberado; bloqueado no modo Órgão.
Fonte: modulo/js/64b-remessa-terceiros.js. Teste: t_e16_remessa_terc.py (9 OK). Suíte: 776 OK, 0 FALHA.

=== v0.74.0 (18/10/2026) — E17: EXPORTAR AS VAGAS DE VOLTA NO MODELO DA FROTA ===
- Central › "Exportar vagas no modelo da frota": escolha a competência (vai na coluna Competencia) e o contrato (ou todos) e sai o mesmo
  Excel que a Central lê — uma linha por vaga, com contrato, lote/item, descrição, FIXO/KM e valores, veículo, motorista, apelido, situação
  e, na versão Empresa, proprietário, CPF/CNPJ, banco/agência/conta/PIX e valor do terceirizado. Na versão Prefeitura essas colunas saem em
  branco (arquivo marcado "PREFEITURA").
- Ida e volta: corrija no Excel e importe pela Central — a mesma vaga (contrato + lote + item) é atualizada, nada duplica; contratos e
  órgãos já existentes não são recriados. Testado: exportar e reimportar sem mexer = 0 novos, 0 erros.
Teste: t_e13_planilha_frota.py (21 OK). Suíte: 794 OK, 0 FALHA (778 + 16 da sincronização com API local).

=== v0.75.0 (18/10/2026) — E18: DOCUMENTOS DA FOLHA NO TIMBRADO DA EMPRESA, COM ASSINATURA ICP-BRASIL ===
- Folha da empresa › Documentos › cartão "Timbrado e assinatura digital" › ligue "Gerar no timbrado da empresa". A partir daí, cada documento
  gerado ali (contrato autônomo/CLT/equipamento, termo de rescisão, recibo, ofício, entrega de EPI, relatórios em PDF da folha — inclusive em lote)
  vai para Documentos e assinatura › Documentos avulsos: sai no timbrado da empresa, com o MESMO texto do PDF simples (cláusula por cláusula,
  carimbos de assinatura, tabelas), pode ser revisado no editor, exportado em PDF/Word e assinado com ICP-Brasil ("Imprimir / PDF / assinar").
  Um documento abre direto; em lote, abre a lista. Desligada, a Folha gera o PDF simples de sempre. A opção fica gravada (cfg.folhaTimbrado).
- Como funciona: o texto que a Folha escreveria no PDF é capturado (sem reescrever os modelos) e vira o texto do documento avulso — a origem
  fica como "Folha da empresa" na referência. Assinante digital = representante da empresa (Sistema › Empresa).
Fontes: modulo/js/90b-folha-timbrado.js; gancho Fo.salvarGancho no folha/adaptador.js. Teste: t_e18_folha_timbrado.py (11 OK). Suíte: 806 OK, 0 FALHA.

=== v0.76.0 (18/10/2026) — E19: IA NA ELABORAÇÃO DE DOCUMENTOS (JUSTIFICATIVAS E MOTIVOS) ===
- O "✨ Redigir com IA" (com a SUA chave de API, em Sistema › Assistente de redação (IA)) agora funciona também fora de um contrato:
  • Documentos e assinatura › Documentos avulsos: texto de qualquer documento (justificativa, ofício, declaração, requerimento, ata, documento
    vindo da Folha). Novo modelo "Justificativa / exposição de motivos" com roteiro: 1. fatos, 2. fundamentos, 3. necessidade e interesse
    público, 4. pedido. Título com "justificativa"/"motivo" faz a IA redigir no formato de exposição de motivos.
  • Folha › Documentos: corpo do ofício e "Função / objeto" do contrato de prestação de serviços.
  • Qualquer campo "justificativa" de tela sem contrato.
- Como sempre: você escreve 1–2 frases sobre o fato, vê a lista do que será enviado (empresa, município, data, título/destinatário/assunto,
  pessoa escolhida — nunca CNPJ, CPF, bancos, valores ou arquivos), revisa o texto sugerido e só então usa. Fica registrado que o texto teve
  apoio de IA. Sem chave configurada, o botão avisa onde configurar.
Fonte: modulo/js/90c-ia-documentos.js. Teste: t_e19_ia_documentos.py (11 OK, serviço de IA simulado). Suíte: 817 OK, 0 FALHA.

=== v0.77.0 (18/10/2026) — E20: BUSCA GLOBAL · ASSISTENTE DO CONTRATO IMPORTADO · FECHAR O MÊS EM UM CLIQUE ===
- BUSCA EM TUDO: Ctrl+K (ou a lupa no topo) — digite parte do número do contrato, placa, vaga, nome da pessoa, fornecedor, órgão, empresa,
  documento avulso ou medição; ↑↓ e Enter abrem a tela certa (contrato, vaga filtrada, veículo, pessoa…). No modo Órgão não aparecem
  equipe, fornecedores nem proprietários.
- CONTRATO IMPORTADO: ao abrir pela primeira vez um contrato criado pela planilha da frota (valor/vigência estimados), aparece "Complete o
  contrato": valor original, vigência início/fim, assinatura e processo num só passo. Salvar tira a nota "estimado" e o item some do
  "O que fazer hoje"; "Depois" não pergunta de novo nesta sessão.
- FECHAR O MÊS EM UM CLIQUE (Importar, exportar e backup › Medição do mês): um botão faz, na ordem, Lançar o mês → Gerar as medições →
  Gerar os lançamentos dos terceirizados, e mostra o resumo: vagas lançadas, medições, terceirizados, total da remessa e as PENDÊNCIAS
  (vagas por km sem viagens, favorecidos sem dados bancários, medições não geradas), com atalho para a Remessa. Nada já lançado é sobrescrito;
  são as mesmas funções dos botões 3, 4 e "Gerar lançamentos do mês" — nenhuma conta nova. No modo Órgão só os passos 1 e 2.
Fonte: modulo/js/99b-praticidade.js. Teste: t_e20_praticidade.py (14 OK). Suíte: 827 OK, 0 FALHA.

=== v0.78.0 (18/10/2026) — E21: PACOTE DO MÊS PARA A PREFEITURA EM UM CLIQUE ===
- Relatórios › "Pacote do mês (prefeitura)" (e o passo "6. Pacote do mês" na aba Medição do mês): escolha o mês, os contratos com medição no
  mês (todos marcados) e os documentos (padrão: boletim, memória de cálculo, relatório de execução, fotográfico, diário, planilha; os que não
  se aplicam ao tipo do contrato são pulados). O sistema monta UM documento no timbrado com capa + índice (contrato × documento) e os
  relatórios de cada contrato em sequência, e oferece: Imprimir / PDF (uma impressão só), Word (tudo), ZIP com um Word por contrato + índice,
  e "Salvar na pasta" (Dados\Contratos\Relatorios: .doc e .zip).
- Usa os mesmos geradores das telas de relatório — nenhum número é recalculado. Documentos restritos à empresa (pagamentos a terceiros,
  bancário, descontos por fornecedor) nunca entram no pacote.
Fonte: modulo/js/99c-pacote-prefeitura.js. Teste: t_e21_pacote_mes.py (8 OK); retrato do menu atualizado (novo item em Relatórios). Suíte: 839 OK, 0 FALHA.

=== v0.79.0 (18/10/2026) — E22: ANEXOS ARRASTAR-E-SOLTAR NA VAGA/VEÍCULO · FOTO DO ODÔMETRO NA VIAGEM (CELULAR) ===
- Cadastros › Vagas dos contratos e Cadastros › Frota: arraste um PDF ou foto (CRLV, CNH, contrato de sublocação, seguro, laudo) para cima
  da linha — vira anexo do contrato da vaga, com a placa e o lote/item na descrição e a categoria pelo nome do arquivo (CRLV, CNH, Contrato de
  sublocação, Seguro, Laudo / vistoria, Licença). Cada linha mostra o clipe 📎 com a quantidade; clique abre Arquivos filtrados pela placa.
  Só na versão Empresa; os arquivos ficam cifrados como todo anexo.
- Campo (celular) › vaga por km › viagem: botão "📷 Foto do odômetro (opcional)" — a foto entra com a viagem (legenda: Odômetro · veículo ·
  data · km · destino) e, no retorno, vai para as fotos do contrato ligada à vaga e à viagem (a viagem guarda o id da foto). Atualize
  Campo.html e Campo_PWA\Campo.html.
Fontes: modulo/js/99d-anexos-arrastar.js; campo/Campo.html; 25-campo.js (vagaId/viagemId na foto, fotoCampoId na viagem). Teste:
t_e22_anexos_odometro.py (8 OK). Suíte: 848 OK, 0 FALHA.

=== v0.80.0 (18/10/2026) — E23: MIUDEZAS DE ROTINA ===
- Cada tela lembra o último filtro (contrato, mês, empresa, situação, aba) escolhido neste navegador: Vagas, Pagamentos aos terceirizados,
  Remessa, Caixa, Medição do mês, Viagens, Frota, Equipe, Arquivos, Carteira, Contratos, Prazos, Faturas, Notas, Pagamentos… Vale quando a
  tela é aberta pelo menu; um atalho com filtro explícito manda. "Todos" também é lembrado.
- Remessa › Já pagos: "Desfazer a última baixa (N, dd/mm)" — volta cada lançamento daquela baixa para pendente e tira a saída do Caixa (mesmo
  desfazer da baixa individual). Só a última baixa feita pela remessa.
- "O que fazer hoje" resolve na hora: "Lançar o mês agora" (medição não lançada), "Abrir a remessa" (terceirizados a pagar) e "Completar agora"
  (contrato com valor estimado) direto do cartão, além do "Abrir".
Fonte: modulo/js/99e-miudezas.js. Teste: t_e23_miudezas.py (9 OK). Suíte: 857 OK, 0 FALHA.

=== v0.80.0 — complemento (18/10/2026): MANUAL TÉCNICO ATUALIZADO + ROTEIRO DE TESTE ===
- Manual_Tecnico_Gestao_de_Contratos_CJR_ENGPRO.pdf/.docx regerados (38 páginas, 34 figuras): capítulo 15 "Novidades das versões 0.68 a 0.80"
  (O que fazer hoje, busca Ctrl+K, planilha da frota, assistente do contrato, viagens no celular, anexos arrastar-e-soltar, fechar o mês,
  remessa, pacote do mês, Folha no padrão, documentos da Folha no timbrado, IA sem contrato, miudezas), item 5.9 "Rotina mensal da empresa
  de locação", Anexo A com E10–E23. Fontes do manual: _fontes_manual_Contratos_v0.80.0.zip.
- ROTEIRO_DE_TESTE_v0.80.txt: 12 blocos para testar tudo com a planilha real, na ordem.
- Três ajustes pequenos encontrados ao tirar as telas do manual (sem mudar regra nenhuma):
  · Painel › O que fazer hoje: os botões de ação ficam empilhados à direita (antes espremiam o texto do cartão).
  · Documentos avulsos / ofício da Folha: o botão "Redigir com IA" aparece mesmo com um contrato selecionado no topo (antes sumia).
  · Pacote do mês: a lista de contratos alinhada à esquerda.
Suíte: 840 OK + 16 (sincronização) OK, 0 FALHA.

=== v0.80.1 (18/10/2026) — DESEMPENHO CONFERIDO COM BASE GRANDE (E25) ===
Medição com 100 contratos, 400 vagas, 12 meses de movimentação (4.400 lançamentos), 2.200 viagens, 2.400 pagamentos a terceirizados,
300 medições, 200 anexos, 80 funcionários (teste/bench_v080.py — base 3,4 MB). Nenhuma fórmula mudou; só dois gargalos de tela:
- Painel: "O que fazer hoje" era calculado 4 vezes por abertura (85 ms) → 1 vez (40 ms).
- Cadastros › Frota: o clipe de anexos normalizava todos os anexos para cada linha (152 ms) → índice montado uma vez (35 ms).
Resultado (ms, base grande): Painel 43 · Contratos 12 · Carteira 48 · Prazos 36 · Caixa 37 · Vagas 4 · Frota 35 · Viagens 6 · Medição do mês 10 ·
Remessa 26 · Pagamentos 4 · Folha 20 · Arquivos 12 · busca (índice) 3 · Pacote 10 contratos × 2 docs 76 · Fechar o mês (lançar 3 + gerar 100
boletins 308 + pagamentos 6) · gravação 321 (fora da tela principal). Base pequena (bench antigo): Painel 25, gravação 23, igual à E4.
Fontes: modulo/js/56c-painel-hoje.js, 99d-anexos-arrastar.js, 99e-miudezas.js. Suíte: 841 OK + 16 (sincronização), 0 FALHA.

=== v0.81.0 (19/10/2026) — E26: BANCO CENTRAL NA REDE LOCAL COM LOGIN POR USUÁRIO + ALERTAS (precisa da API 1.2 no Docker) ===
Vários computadores da mesma empresa no mesmo Docker, cada um com o seu usuário (em vez de todo mundo ter o token do .env):
- Cartão Banco de dados central: Usuário / Senha / Entrar → "Conectado como <nome> (empresa, sessão até dd/mm)", Sair,
  "Computadores da empresa" (quem enviou, quando, versão, registros) e, para o administrador, "Usuários do banco" (criar, nova senha,
  desativar). A sessão (30 dias) substitui o token no envio automático, no Receber do banco e nos arquivos. O token do .env continua valendo.
- A API só aceita do usuário dados da empresa dele (CNPJ): um usuário de outra empresa não envia nem recebe os seus.
- Painel › O que fazer hoje: "Banco central: sessão vencida" (Entrar de novo), "último envio falhou" (Tentar agora), "sem envio há N dias"
  (Enviar agora) e "N computador(es) da empresa enviaram dados novos" (Receber do banco). Consulta silenciosa 1× por sessão.
- Docker: pasta Docker_Banco_api_1.2\ com server.js/schema.sql/pgmini.js + LEIA-ME_API_1.2.txt (primeiro admin pelo .env, porta
  para a rede, firewall, IP fixo). Tabelas novas só engpro.usuarios/config/acessos — os dados não mudam.
Fontes: modulo/js/99f-banco-login.js (+ 28-banco.js aceita sessão no lugar do token); api/server.js 1.2.0. Teste: t_e26_banco_login.py (27 OK).
Suíte: 882 OK + 16 (sincronização), 0 FALHA.

=== v0.82.0 (19/10/2026) — E27: BUSCA DE CONTRATOS NO PAINEL ===
Caixa "Buscar contrato" logo abaixo do "O que fazer hoje": digite objeto, número do contrato, nome do contratado ou CNPJ (com ou sem
pontuação; vale parte do número) e a lista filtra na hora — todas as palavras precisam aparecer. Filtro de situação ao lado. Cada linha
mostra contrato, objeto, contratada (modo Órgão) ou contratante (modo Empresa), CNPJ, situação, vigência e valor vigente; clique abre o
contrato (Enter abre o primeiro). A busca fica lembrada ao voltar ao Painel. Mostra os 60 primeiros; com mais, refine as palavras.
Fonte: modulo/js/99g-painel-busca.js. Teste: t_e27_painel_busca.py (13 OK).

=== v0.83.0 (19/10/2026) — E30: REIMPORTAÇÃO DO PORTAL NÃO DUPLICA E REABRE · E32: MÓDULOS APOSENTADOS ===
E30 — Importar a planilha/CSV/JSON do portal de novo: aditivo já importado (mesmo contrato + mesmo número de origem, ex.: "…0010.SAAE - 1º
ADIT") não repete. Contrato que estava Encerrado mas tem aditivo de prazo com vigência ainda não vencida volta a "Em execução" (a linha do
portal traz só a vigência original). Planilha da frota: contrato Encerrado cuja competência da planilha é depois do fim da vigência é
REABERTO e, se nem o aditivo cobre o mês, a vigência vai até o fim do mês da competência, com a observação "Vigência prorrogada até … pela
planilha da frota — confira o aditivo de prazo" (a prévia da Central avisa "N contrato(s) reaberto(s)/prorrogado(s)").
E32 — Catálogo 18 do CJR ENGPRO aposentou 02 Locação de Máquinas, 03 Locação de Veículos, 04 Limpeza Pública e 08 Rotas Escolares (o 05
já estava): os arquivos continuam na pasta com uma faixa "descontinuado" e servem só para exportar. Aqui, em Sistema › Importar, exportar e
backup, o cartão "Trazer dados dos módulos aposentados" reúne os importadores que já existiam (Imp03 .json, Imp02 planilha TUDO + .maqenc,
coleta .medenc, Imp08 .json, Folha Offline backup_folha_*.json) com o passo a passo de cada módulo antigo. Só no modo Empresa com edição.
Fontes: 24-impexp.js (ligarMov/aplicar), 98e-planilha-frota.js (estrutura), 99h-trazer-dados.js. Teste: t_e30_reabrir.py (12 OK; usa
portal_metal_amostra.json, amostra real do portal de Boa Viagem). Núcleo 2026.10.19-E32 (catálogo 18; pacotes de licença sem 02/03/04/05/08).

=== v0.84.0 (19/10/2026) — E33: E-MAIL, TROCA E RECUPERAÇÃO DE SENHA DO BANCO CENTRAL (API 1.3) ===
Cartão Banco de dados central (Sistema › Importar, exportar e backup): conectado → botão "Trocar minha senha" (senha atual + nova, POST
/api/senha); desconectado → link "Esqueci a senha": informe o usuário, um código de 6 dígitos vai para o e-mail cadastrado nele (vale 15 min,
3 pedidos a cada 5 min, 5 tentativas por código), digite o código e a senha nova. Usuários do banco: coluna E-mail (clique para alterar) e
campo E-mail no novo usuário. Precisa da API 1.3 (Docker_Banco_api_1.3 do pacote) e das variáveis SMTP_* no cjr.env — sem elas o link
avisa "envio de e-mail não configurado"; sem e-mail no usuário avisa para pedir uma senha nova ao administrador (Usuários do banco › Nova senha).
Fonte: 99f-banco-login.js (trocarSenha, esqueci). Teste: t_e33_senha.py (25 OK, com API 1.3 + SMTP de teste em teste/smtp_falso.js).

=== v0.85.0 (19/10/2026) — E34: LGPD E PAINEL MASTER POR EMPRESA NO BANCO CENTRAL (API 1.4) ===
Cartão Banco de dados central, conectado com usuário: "Exportar tudo da empresa (JSON)" baixa um arquivo com todas as bases (computadores)
da empresa no banco central — coleções, lista dos arquivos e usuários (GET /api/exportar; usuário comum só a própria empresa). Administrador
(perfil admin, ou token do Docker): "Apagar os dados desta empresa do banco" — pede para digitar o CNPJ e apaga registros, arquivos, bases,
envios e usuários da empresa no banco central (DELETE /api/empresa; quem apaga continua; fica uma linha em engpro.auditoria). O que está
neste computador NÃO é apagado. "Empresas no banco" (painel master): uma linha por CNPJ com computadores, registros, arquivos, usuários,
último envio e versão, com Exportar/Apagar por linha (GET /api/empresas). Fonte: 99i-lgpd-banco.js. Teste: t_e34_lgpd.py (22 OK).
Precisa da API 1.4 (pasta Docker_Banco_api_1.4 do pacote); com API anterior os botões dão "rota não encontrada".

=== v0.86.0 (20/10/2026) — E37: ADITIVOS DO PORTAL LIGADOS PELOS DÍGITOS DO NÚMERO ===
Pedido: "puxe o aditivo do contrato e atualize o prazo conforme o aditivo". O prazo já era unificado (lista, selo "Vence em…", prazos e
relatórios usam a vigência COM aditivos), mas 507 aditivos do arquivo do portal de Boa Viagem não achavam o contrato porque o número vinha
com sufixo diferente ("202504020005.SETAS - 1º ADIT" × contrato "202504020005.F.SETAS") ou sem sufixo ("202409170001.GAB - 2º ADIT" × contrato
"202409170001"). Agora há um 3º nível de casamento: só os dígitos do número (≥ 8), quando é único. No arquivo real: aditivos sem contrato
507 → 199 (os que sobram são contratos que não existem no arquivo, ex.: "2021.07.26.002 - 02"), contratos prorrogados 613 → 682.
Para a base já importada: Sistema › Importar, exportar e backup › importe o MESMO arquivo do portal de novo — os aditivos que faltavam entram
(os já importados não repetem, E30) e os contratos Encerrado com prazo novo voltam a Em execução. Os que o arquivo não cobre ficam na prévia
("aditivos sem contrato"). Fonte: 24-impexp.js (ligarMov › porDigitos). Teste: t_e30_reabrir.py (13 OK).

=== v0.87.0 (20/10/2026) — E39: MEU PERFIL (E-MAIL, TELEFONE, ENDEREÇO, FOTO E SENHA DO PRÓPRIO USUÁRIO) ===
Clique no nome ou na foto, no alto à direita → "Meu perfil". Só leitura: nome, CPF e usuário (quem muda é o administrador em CJR ENGPRO ›
Usuários e acessos). Editáveis: e-mail, telefone, endereço, foto (recortada em 160 px) e senha (senha atual + nova + repetir, mínimo 6).
Com o login único, tudo é gravado no cadastro central (engpro_db.json → usuário) e vale para todos os módulos e computadores da mesma
pasta; a troca de senha grava o hash novo, reembrulha a chave de dados e recifra o cofre de acessos aos módulos (por isso exige a senha
atual e a chave de dados aberta — entre pela tela de início). Sem login único (demonstração): e-mail/telefone/endereço em cfg.perfilUsuario
e a foto fica neste navegador; a senha só pelo CJR ENGPRO. Fonte: 99j-meu-perfil.js. Teste: t_e39_perfil.py (13 OK).
Obs.: o CPF só aparece se o cadastro do usuário no CJR ENGPRO tiver o campo cpf (versões antigas do console não pedem CPF → "—").

=== v0.88.0 (20/10/2026) — E40: "BUSCAR EM TUDO" NOS FILTROS DE CONTRATOS + CNPJ NAS BUSCAS DOS CADASTROS ===
Operação › Contratos › Opções de filtro: campo "Buscar em tudo" no alto — qualquer palavra (objeto, número, processo, nome ou CNPJ do
contratado, secretaria/órgão, modalidade, fiscal, situação); todas as palavras precisam aparecer, sem acento; CNPJ e número valem com ou
sem pontuação (só dígitos, 4+). Combina com os outros filtros, Enter/Pesquisar aplicam, fica lembrado, Limpar zera. Mesmo índice da busca
do Painel (E27). Cadastros (Empresas, Órgãos, Pessoas, Fornecedores…): a caixa "Buscar…" agora ignora acentos, aceita várias palavras e acha
CNPJ/CPF/telefone com ou sem pontuação; Empresas também busca por município, representante e e-mail.
Fontes: 99k-busca-filtros.js, 04-crud.js (desenhar), 05-cadastros.js (busca de empresas). Teste: t_e40_busca_filtros.py (14 OK).

=== v0.89.0 (20/10/2026) — E41: RELATÓRIOS (TODOS OS CONTRATOS) COM BUSCA E GRUPOS EM SANFONA ===
Relatórios › Relatórios (todos os contratos): caixa "Buscar documento (nome ou formato)" acima da lista — filtra os documentos (sem acento,
todas as palavras), esconde os grupos sem resultado e abre os que têm. Os grupos (Contrato, Financeiro do contrato, Medição, Obra, Geral,
Financeiro, Operação…) viraram sanfona: clique no título abre/fecha; o título mostra "marcados de total"; botões "Abrir todos" e "Fechar
todos"; o que ficou aberto/fechado é lembrado neste navegador. Todos/Nenhum, prévia e exportações continuam iguais.
Fonte: 99l-rel-sanfona.js. Teste: t_e41_rel_sanfona.py (11 OK).
v0.89.1: cabeçalho de cada grupo em cartão com ícone (Contrato, Financeiro, Medição, Obra, Geral, Operação…), contador e seta à direita.

=== v0.90.0 (20/10/2026) — E42: CADASTRO DE RESPONSÁVEL POR LINK, PROVA DE VIDA, AUTORIZAÇÃO DO LOGIN E ICP-BRASIL ===
Sistema › Responsáveis e logins: botão "Enviar cadastro" cria um link (vale 7 dias) no serviço de Assinatura, pela API do banco central
(1.5.0), e manda por WhatsApp (wa.me com a mensagem pronta), e-mail (SMTP do cjr.env) ou copiar. A pessoa abre no celular ou no computador,
confere nome/CPF/cargo, completa e-mail/celular/endereço/nascimento/RG, fotografa o documento (frente/verso), faz a prova de vida pela
câmera (rosto, piscar, virar; selfie comparada com o documento por face-api no próprio aparelho), aceita o termo (LGPD / Lei 14.063),
marca "confirmo meus dados e AUTORIZO a criação do meu login" e escolhe a própria senha. A linha mostra a situação (aguardando / confirmado
pela pessoa · autorizou o login · prova de vida ✓ · rosto confere / aprovado / reprovado / vencido); ícone ↻ atualiza; "Criar login (senha da
pessoa)" cria o usuário no CJR ENGPRO com a senha escolhida (sem senha provisória; a API entrega a senha UMA vez). Botão escudo: registra o
certificado ICP-Brasil que a pessoa já tirou (nuvem/A1/A3, provedor, validade, série) e mostra o guia para tirar numa AR. Offline: botão
desabilitado com o motivo; "Criar login" comum segue igual. Painel da Assinatura: /painel/cadastros (fotos, prova de vida, aprovar/reprovar).
Fontes: 99m-cadastro-responsavel.js, 53-responsaveis-equipe.js (criarLogin(r, {senha, cadastroId})). API: /api/cadastros (server.js 1.5.0).
Assinatura: servidor/cadastro.py + static/face. Compose: api com ASSINATURA_URL/ASSINATURA_URL_PUBLICA e volume /compartilhado (chave do
módulo). Testes: t_e42_cadastro_link.py (18), t_e42_api_cadastros.py (15), e42\teste\t_e42_cadastro.py (30), t_e42_pagina.py (8).
Ver Docker_Unificado\LEIA-ME_E42_cadastro_por_link.txt (validade jurídica, cláusula-modelo, passo a passo).
E42b — Relatórios (todos os contratos): Todos/Nenhum agora valem só para os grupos ABERTOS (com tudo fechado, valem para todos); o contador
avisa "(só Obra)". Fonte: 99l-rel-sanfona.js. Teste: t_e41_rel_sanfona.py (14).
E42c — Pacote do mês para a prefeitura: filtro acima da lista de contratos (Contrato, Objeto, Fornecedor, CNPJ com ou sem pontuação,
Secretaria) + "Marcar visíveis"/"Desmarcar"; os que não batem somem e ficam desmarcados. Fonte: 99n-pacote-filtro.js. Teste: t_e21_pacote_mes.py (13).
E42d — Menu lateral: sanfona única (abrir uma seção fecha as outras; a aberta fica verde com linha verde nos itens; tudo acende em verde ao
passar o mouse). Botão de tema abre a escolha Escuro / Claro / Sistema (segue o Windows). Fonte: 99o-menu-tema.js. Teste: t_e42d_menu_tema.py (12).
E43 — Ícone das abas padronizado com o logotipo CJR (Contratos, Campo, Comercial, SST, Ambiental, site, API, Assinatura).

=== v0.90.1 (20/10/2026) — E45: SÓ GESTÃO DE CONTRATOS NO CATÁLOGO (MODOS ÓRGÃO PÚBLICO / EMPRESA) ===
Catálogo 19 (engpro_nucleo.js 2026.10.20-E45): Folha de Pagamentos (07), Banco de Referências (09), SST (10) e Ambiental (11) ficam
ocultos/desativados — a tela de início, o cadastro de licença e o site (precos_e45) mostram só Gestão de Contratos, que tem dois modos:
ÓRGÃO PÚBLICO (contratante) e EMPRESA (contratada). Os arquivos dos módulos continuam na pasta (nada apagado); o Painel › Preços do site
pode reativar. Tela de início com o texto novo em negrito. No módulo, embaixo do logotipo: "GESTÃO DE CONTRATOS" + modo em negrito
(ÓRGÃO PÚBLICO / EMPRESA), que muda com Licença e modo. Fonte: 99p-marca-modo.js. Testes: t_e45_marca_modo.py (4), e45\t_e45_console.py (5).

=== v0.91.0 (20/10/2026) — E46: CADASTRO PADRÃO DE QUEM ASSINA (EMPRESA, PESSOA, RESPONSÁVEL) ===
As fichas de Empresa (Cadastros › Empresas), Pessoa (Cadastros › Pessoas e papéis) e Responsável (Sistema › Responsáveis e logins) ganharam,
no fim do formulário, os mesmos dois blocos: (1) "Cadastro por link — documento, reconhecimento facial e autorização do login": situação
+ botão "Enviar link para finalizar o cadastro" (WhatsApp/e-mail/copiar; na empresa o link vai para o REPRESENTANTE LEGAL, no telefone/e-mail
da empresa) + "Atualizar situação". (2) "Certificado ICP-Brasil (assinatura qualificada) — opcional": tipo (nuvem/A1/A3), provedor/AR,
validade e nº de série, gravados na própria ficha (icpTipo, icpProvedor, icpValidade, icpSerie); o selo aparece na lista de responsáveis.
A ficha nova precisa ser salva antes de enviar o link; enviar exige o banco central ligado (Dados › Banco central).
Fontes: 99q-cadastro-assinante.js (novo), 99m-cadastro-responsavel.js (CadResp.gravar/pessoaDe/cert), 53-responsaveis-equipe.js (bloco na ficha).
Teste: t_e46_cadastro_assinante.py (13 OK). Próxima etapa (E44): a empresa escolhe o plano e adere pelo site depois do cadastro.
v0.91.1 (E47): site oficial definido em todos os botões/links — https://cjrengpro.com.br (rodapé "Desenvolvido por", tela de início: Site oficial,
Ver planos, Baixar o sistema, Voltar para o site). Título do bloco ICP-Brasil: "opcional, só se o órgão exigir" + explicação de que o cadastro
completo pelo link já dá validade jurídica (assinatura avançada, Lei 14.063/2020).

=== v0.91.2 (20/10/2026) — E52: ARQUIVO DO PORTAL EM QUALQUER IMPORTAÇÃO (ADITIVOS) ===
Importar — Aditivos e apostilamentos (e Empresas, Órgãos, Licitações) reconhece o arquivo do portal da transparência (JSON/Excel com
Número "2025…SETAS - 1º ADIT", Modalidade, Data, Nome, CPF/CNPJ, Secretária, Objeto, Valor, Vigência início/fim, Situação) e usa a
importação do portal: separa o nº do contrato e o nº do aditivo, acha o contrato pelo número (com ou sem sufixo, pelos dígitos),
Modalidade → objeto (duração = prazo; acréscimo/redução = valor), Data → assinatura, Vigência fim → nova vigência, Valor →
valor informado (só referência; acréscimo/supressão só quando a modalidade diz), situação firmado. Arquivo SÓ de aditivos agora importa
(antes a prévia mostrava "Importar 0 registro(s)"); aditivo que já existe (mesmo contrato, instrumento e data/número) não duplica;
a prévia lista os aditivos e avisa quantos já existiam e quantos ficaram sem contrato. Campo novo no importador manual: "Valor
informado no documento (R$)". Fontes: 51-motor-impexp.js (carregar), 24-impexp.js (portal, mostrarPrevia), 92-aditivos-importar.js.
Teste: t_e52_aditivos_portal.py (7 OK, com os arquivos reais de Boa Viagem: 4.873 contratos + 1.716 aditivos; 80 sem contrato no arquivo).
Biblioteca cjr_assinatura.js: aviso do Assinador explica que ele é o serviço do Docker (SUBIR.bat) e a alternativa pelo servidor.

v0.92.0 (20/10/2026) — E56: CORRIGIR ERROS DA IMPORTAÇÃO COM IA. Na prévia de qualquer importação do motor (empresas, pessoas,
contratos, aditivos, caixa, frota, vagas, responsáveis, fornecedores…) aparece o botão "✦ Corrigir erros com IA (n)" quando há linhas
recusadas ou coluna obrigatória sem mapear. Ele (1) aplica regras locais sem internet — extrai o CPF/CNPJ de célula com texto, número
com "R$"/texto, data por extenso ou com pontos, UF pelo nome, opção parecida, nome parecido no cadastro —; (2) manda o que sobrou para a
IA (chave em Sistema › Assistente de redação): só o texto da célula, o campo, o formato esperado e o erro; CPF e CNPJ NUNCA vão para a IA;
também pede o mapeamento das colunas obrigatórias que o motor não reconheceu pelo título. Tudo volta numa tabela de PROPOSTAS (linha, campo,
original → corrigido, origem regra/IA, "confere?" já validado pelas regras do motor); "Aplicar correções" só troca o texto das células na
prévia e reprocessa — as regras de validação (Motor.valor) e o botão Aplicar continuam iguais; nada é gravado sem conferir. Sem chave
de IA, aplica só as regras locais e avisa. Fonte nova: 99r-motor-ia.js. Teste: t_e56_motor_ia.py (14 OK, IA simulada).

v0.93.0 (20/10/2026) — E58: ADICIONAIS DO PLANO — IA POR TOKENS E SIGNATÁRIOS DA ASSINATURA DIGITAL. (1) A IA passa a funcionar pelo
servidor da CJR (POST <servidor>/api/ia, chave da CJR): acabou a chave própria do cliente. Cada instalação tem franquia mensal de tokens
pelo tipo do plano (Órgão 200 mil / Empresa 300 mil / avaliação 20 mil) e pode comprar pacotes extras que não vencem (500 mil = R$ 39;
2 mi = R$ 119). Sistema › "IA — uso e tokens" mostra franquia, usado no mês, saldo extra, disponível e os botões "Comprar mais tokens" /
"Comprar signatários": pedido no servidor → PIX copia-e-cola → confirmação automática → crédito na hora. Sem tokens, "Redigir com IA"
e "Corrigir erros com IA" avisam e oferecem a compra. (2) Assinatura Digital: o plano inclui 1 signatário; enviar cadastro por link para
mais pessoas exige signatários adicionais (R$ 29/mês Órgão, R$ 39/mês Empresa; 5+ −15%, 10+ −25%); o limite vale ao ENVIAR o link
(reenvio para a mesma pessoa não ocupa vaga). O módulo precisa ser aberto pela tela de início (ENGPRO.html grava db.servidorLic e o
instalacaoId; 98-porta expõe CJR_PORTA.instalacao/servidor). Fonte nova: 99s-adicionais.js; 98-porta.js. Testes: t_e58_adicionais.py
(17 OK, servidor simulado); t_ia/t_e19/t_e56 usam window.CJR_IA_PROPRIA (só teste). Servidor: site inc/adicionais.php (E58).

v0.93.1 (20/10/2026) — E58b: o PIX dos adicionais (tokens de IA e signatários) mostra também o QR CODE (BR Code) para pagar pela câmera
do app do banco, além do copia-e-cola, e tem "Imprimir / PDF" (QR + código + dados da CJR). Biblioteca QR da tela de início embutida no
módulo (99s0-qr-lib.js, window.CJR_QR). Teste t_e58_adicionais (18 OK).

v0.94.0 (20/10/2026) — E60: IMPORTAR MEDIÇÕES ANTERIORES COM IA. Em Medições (contrato com planilha), botão "✨ Importar medições
anteriores (IA)": solte os boletins antigos — PDF, foto JPG/PNG, Excel ou CSV, vários de uma vez. O sistema lê o texto localmente
(pdf.js / Excel); PDF digitalizado e foto vão como anexo para a IA (servidor da CJR, /api/ia com anexos — consome mais tokens). A IA
devolve cada medição (número, período, itens com quantidade do período ou acumulada, P.U., totais); o sistema casa item a item com a
planilha vigente (número do item → código → descrição parecida), calcula o período a partir do acumulado quando o boletim só traz
acumulado (considerando as medições do sistema e as do mesmo lote), e mostra a PRÉVIA: itens casados/não casados, total calculado ×
informado, "≠" quando o P.U. do boletim difere da planilha, "já existe" para número repetido. "Gravar medições marcadas" cria
medições normais (Med.salvar) na situação escolhida (padrão Paga), em ordem de número — acumulado e saldo calculados pelo sistema;
histórico registra o arquivo de origem; m.importadaIA guarda total informado e itens não casados. Nenhuma regra muda. Fonte:
99t-medicoes-ia.js; servidor: site inc/adicionais.php (anexos image/document), licencas/index.php (corpo até 26 MB).
Teste: t_e60_medicoes_ia.py (11 OK, servidor simulado).

v0.95.0 (20/10/2026) — E61: COMEÇAR EM 10 MINUTOS. Sistema › "Começar em 10 minutos" (e cartão no Painel enquanto houver passo
pendente, com "Ocultar"): assistente de primeiro uso que lê o banco e mostra 6 passos com ✓/pendente/bloqueado, contagem e o botão
que resolve — 1 dados da empresa/órgão e timbrado · 2 contratos e aditivos (importação do portal da transparência) · 3 planilha de
cada contrato (lista os sem planilha) · 4 medições anteriores com IA (lista os sem medição; abre o E60 no primeiro) · 5 responsáveis e
logins · 6 pasta de trabalho / banco central. Nada é gravado por aqui. Fonte: 99u-comecar.js. Teste t_e61_comecar.py (7 OK).
E62 (site + tela de início): adesão pelo site — adesao.php (modo, usuários, período, dados, PIX com QR Code + copia-e-cola,
confirmação automática, chave na tela + e-mail + botão "Abrir o sistema na nuvem" com #ativar=<chave>); ENGPRO.html ativa a licença
sozinho ao entrar com esse link (ativarChaveDoLink). "Testar grátis 7 dias" leva direto ao sistema na nuvem (avaliação).

==============================================================================
v0.96.1 — E68 (22/10/2026) — ORDENS DO CONTRATO: OS, ORDEM DE COMPRA E NOTIFICAÇÃO
==============================================================================
Onde: Contrato › aba Documentos › "Ordens, termos e atestados" (e Documentos › Ordens).
• Ordem de compra (nova, coleção ordens_compra): fornecedor (contratada do contrato / fornecedor do cadastro no modo
  Empresa / outro), itens (descrição, un, quantidade, valor unitário), local e prazo de entrega, condição de pagamento,
  empenho vinculado (modo Órgão — só informação, não altera o saldo do empenho), observações e "Redigir com IA".
  Emitir numera OC nnn/ano e gera o documento no timbrado (modelo "ordem_compra", quadro {quadro.ordemCompra},
  variáveis {oc.*}) com assinatura e acompanhamento: emitida → recebida → entregue (ou cancelada).
• CONTROLE DE SALDO (pedido do Carlito, 22/10):
  - Valor: a soma das ordens de compra NÃO canceladas do contrato não pode passar do VALOR VIGENTE. Na aba há os
    indicadores Valor vigente / Comprometido em ordens / Saldo para novas ordens. No editor o saldo é recalculado a
    cada item; se passar, fica vermelho e Salvar/Emitir são recusados ("ultrapassa o saldo disponível do contrato").
    O saldo NÃO desconta o medido (a medição paga o que a ordem autorizou — evitar contagem dupla).
  - Quantitativo: itens trazidos da planilha do contrato ("Itens da planilha do contrato") guardam a chave do item e
    mostram "Saldo qtd / contrato" = quantidade contratada − já pedida em outras ordens não canceladas. Passar do
    saldo marca em vermelho e bloqueia Salvar/Emitir. Itens digitados à mão não têm quantitativo a controlar.
    A aba tem o quadro recolhível "Saldo de quantitativos por item da planilha".
  - Empenho (Órgão): ordem maior que o saldo do empenho só AVISA e pede confirmação.
• Ordem de serviço estruturada (coleção ordens_servico): data, início, prazo em dias (término calculado), responsável,
  serviços em texto e itens da planilha com quantidade; gera o documento OS com {os.*} e {quadro.osItens}; pode
  registrar a data da OS no contrato (só se estiver vazia, com confirmação).
• Notificação: usa Fiscalização › Notificações (fatos, fundamento, providência, prazo de defesa) e o documento NOT.
• IA: "Redigir com IA" continua no editor do documento — o sistema avisa sempre: confira o texto, a IA pode errar.
Arquivos: _fontes/modulo/js/99v-ordens-contrato.js (novo); 00-util.js versão. Teste: _fontes/teste/t_e68_ordens.py
(24 verificações OK, prints em prints_E68). Nenhum cálculo existente foi alterado. Backup do v0.95.0 em
_versoes_anteriores\E68_2026-10-22\Contratos_v0.95.0_antes_E68.html.

v0.96.2 — E69 (22/10/2026) — MOSTRAR SENHA. Todo campo de senha do módulo (login, usuários, cofre, modais) ganhou o botão de olho
para mostrar/ocultar a senha (99w-olho-senha.js, o mesmo da tela de início e do Painel do site). Nenhuma regra alterada.

v0.97.0 — E71 (22/10/2026) — PASTA DA EMPRESA NO SERVIDOR (SaaS). Aberto pela internet, o módulo não pede mais "Conectar a pasta de
trabalho": o banco cifrado (contratos_dados.json) é gravado na pasta da empresa no servidor (a mesma que o login localiza), com backup
diário (40 últimos) e os relatórios/planilhas gerados (até 4 MB cada, 400 por módulo). O servidor nunca lê o conteúdo (cifrado com a
senha de dados do login único). Entrou de outro computador com o mesmo usuário: abre tudo. Fotos continuam no navegador (IndexedDB).
Precisa da API 1.8.0 (Docker_Banco_CJR_ENGPRO\api\server.js — rotas /api/pasta/<id>/mod/<modulo>[/backups|/arq|/arqs]).
No computador (file:// / localhost) nada muda. Fonte: 99x-pasta-servidor.js; 10-sistema.js (cartão da pasta no online).

v0.97.1 — E73 (22/10/2026) — EDITOR DE TIMBRADO: o zoom do papel de folha completa pode ser digitado (campo ao lado do controle,
30–300 %). A aba "Logo e imagens" ficou só com a logo; a imagem pronta do cabeçalho está no topo da aba Cabeçalho e a imagem
pronta do rodapé + texto do rodapé no topo da aba Rodapé (bloco recolhível "Imagem pronta …", sem duplicar). Fonte: 38b-editor-timbrado.js.

v0.98.0 — E74 (22/10/2026) — TIMBRADO FIXO NA ABA + LOGO NO SITE. Sistema › Empresa › "Logo, timbrados e cabeçalhos" já mostra o
editor do timbrado da empresa (sub-abas Logo e imagens / Cabeçalho / Rodapé / Papel timbrado / Página e quebras) sem o botão "Editar meu
timbrado"; as outras partes (empresas/órgãos cadastrados) continuam por "Editar". Ao salvar a logo (ou "Atualizar do cadastro central"),
o módulo envia a logo ao servidor de licenças (POST /api/logo, só a imagem ≤ 160 KB + nome/site) e ela aparece na vitrine
"Clientes e parceiros" do site — para clientes com licença paga. Fontes: 38b-editor-timbrado.js, 99y-vitrine-logo.js (novo).

v0.99.0 — E75/E76 (22/10/2026)
• PAPEL TIMBRADO EM DUAS VERSÕES: na aba "Papel timbrado (folha completa)" há os botões Retrato (A4 em pé) e Paisagem (A4 deitado),
  cada um com a própria imagem, zoom, posição e margens. Cada documento usa a versão da sua orientação (boletins/medições em paisagem,
  ofícios/relatórios em retrato); com só uma versão cadastrada, ela vale para as duas. Campos novos: timbFolhaL, timbFolhaLOrig,
  folhaCfgL, folhaTopoL, folhaRodL, folhaMlL, folhaMrL (copiados para o cadastro central e para as partes). Timbrado antigo marcado
  como "paisagem" continua valendo (vira a versão paisagem ao salvar). A orientação da aba "Página e quebras" passa a ser só o
  padrão dos documentos. Fontes: 38b, 09 (folhaDois/folhaMarker/folhaBg), 36, 39, 55, 83.
• MENUS: "Relatórios da folha (PDF)" foi para RELATÓRIOS e "Documentos da folha (contratos, recibos, EPI)" para DOCUMENTOS E
  ASSINATURA — não aparecem mais dentro de "Folha da empresa" (só no modo Empresa). Fontes: folha/adaptador.js, 90.
• FILTROS DE CONTRATOS: "Buscar em tudo (qualquer campo)" fica sempre visível; o botão "Mais filtros / Menos filtros" mostra ou
  esconde só da linha "Exercício do contrato" para baixo (lembrado por tela). Fontes: 99k, 05b, css/base.css.

v0.99.1 — E79 (22/10/2026): envio da logo ao site com aviso claro do resultado (já aparece / aguarda licença paga / motivo do erro). 99y-vitrine-logo.js.
